我想实现一些可能以某种条件选择(MS SQL)结束的东西,但我不知道如何实现。
我试图将我的问题简化为以下描述:
我有 3 个表:第一个包含文章(Art_number、Art_description 和 Productgroup),第二个包含客户(Cust_number 和 Cust_name),第三个表包含折扣信息(Cust_number、Productgroup 和 Discount_percentage)
表:文章
001,fork,cutlery
002,knife,cutlery
003,plate,tableware
004,cup,tableware
表:客户
1234,smith
5678,jones
表:折扣
1234,cutlery,0.9
1234,tableware,0.8
5678,cutlery,0.75
5678,tableware,0.7
我的问题是关于与第 4 个表的关系,该表包含一些(不是全部!)替代(与客户相关)名为 Cross_Ref 的文章编号,它通过包含文章编号和客户编号(Art_number、Alt_Art_Nr 和 Customer_Nr)链接前两个表
表:Cross_Ref
002,1002,1234
002,92002,5678
004,1004,1234
004,92004,5678
我想生成一个表格,在第一列中显示文章编号,在第二列中显示文章描述。第三列中的备选商品编号(如果有,否则为空)和第四列中的客户名称
上面的信息看起来应该是这样的:
001,fork,,smith
001,fork,,jones
002,knife,1002,smith
002,knife,92002,jones
003,plate,,smith
003,plate,,jones
004,cup,1004,smith
004,cup,92004,jones
我的查询目前看起来像这样:
SELECT Art_number, Art_description, Alt_Art_Nr, Cust_name
FROM Articles,
Customer,
Cross_Ref
WHERE Articles.Art_number = Cross_Ref.Art_number
and Customer.Cust_number = Cross_Ref.Customer_Nr
and Customer.Cust_number = Discounts.Cust_number
and Articles.Productgroup = Discounts.Productgroup
这只显示那些确实有替代文章编号的行,但不显示没有在 Cross_Ref 表中提到的参考的文章。
原则上它是 4 个表的组合,由 3 个表完全连接,但第 4 个表只包含一些文章(有一个替代编号),因此在查询结果中只产生那些文章编号,而我会如果没有结果,喜欢查看所有商品编号和空 (NULL) 字段。
谁能告诉我一个如何存档的例子?
您可能正在考虑需要一个 OUTER JOIN 而不是您正在使用的隐含的 INNER JOIN。例如假设
然后获取所有员工及其角色的列表,您将使用
会给
根据输出,我认为您需要以下类型的查询:
如果没有关于该表的更多信息
Discount
,我们无法确定,但(Base)
可能应该是(两个表的笛卡尔积):或(使用另一个中间表的连接,即):
所以,最终的查询应该类似于:
或者: