鉴于下面此查询返回的总行数必须等于“发票”表中的行数
SELECT VendorName, InvoiceNumber
FROM Invoices
LEFT JOIN Vendors ON Invoices.VendorsID = Vendors.VendorID
当您使用LEFT
关键字替换RIGHT
关键字时,为什么此查询返回的总行数不等于Vendors表中的行数?
答案 0 :(得分:2)
简单的答案是因为这意味着“右侧”(在这种情况下为>> fprintf('\nFinal conversions (percent):\n\t\tH2S: %f\n\t\tCOS: %f\n\t\tCS2: %f\n\n',[1,1],[1,1],[1,1])
Final conversions (percent):
H2S: 1.000000
COS: 1.000000
CS2: 1.000000
Final conversions (percent):
H2S: 1.000000
COS: 1.000000
CS2: 1.000000
)的每条记录都会在结果中表示。
因此,如果您的供应商没有任何发票,它将显示在Vendors
中,但不会显示在RIGHT JOIN
中(因为“左侧”没有匹配表)。
答案 1 :(得分:2)
您的供应商表是1对多关系中的从属表,因此当您在发票和供应商上执行RIGHT联接时,您将在关系中为每个发票+供应商组合获得1行,另外还有1行发票表中没有发票记录的每个供应商。
所以,假设您有三家供应商,其中有三份发票。
供应商1有2张发票
供应商2有1张发票
供应商3有0个发票
使用此数据,RIGHT JOIN将返回4行:供应商1为两行,供应商2为一行,供应商为3行。
This fiddle提供了我上面所描述的一个例子。
答案 2 :(得分:1)
右连接可确保右表中的所有行都出现在结果中。
但是,如果同一供应商有3张发票,结果集中仍然有3行,而不是1.那就是联接的工作方式:)