6

我有两张桌子:opensalesorderitems

我想根据 item_number 从两个表中检索数据,并且可以正常使用以下查询。(使用内连接)

SELECT opensalesorder.so_number,items.VendorName,opensalesorder.item_number
FROM `opensalesorder` 
INNER JOIN items on opensalesorder.item_number = items.ItemName 
WHERE items.ItemType = 'Stock' and opensalesorder.status NOT LIKE 'on po' 
GROUP BY opensalesorder.item_number

但我也想要“items”表中的所有行,即使在 opensalesorder 和 items 中没有找到 ItemName 的任何匹配项。

但是使用下面的查询似乎对我不起作用。

SELECT opensalesorder.so_number,items.VendorName,opensalesorder.item_number
FROM `opensalesorder` 
RIGHT JOIN items on opensalesorder.item_number = items.ItemName  
WHERE items.ItemType = 'Stock' and opensalesorder.status NOT LIKE 'on po' 
GROUP BY opensalesorder.item_number

即使在左侧找不到匹配项,右连接也会从右表返回结果。

查询对吗?

谢谢

4

1 回答 1

16

这是您的查询:

SELECT opensalesorder.so_number,items.VendorName,opensalesorder.item_number
FROM `opensalesorder` right join
     items
     on opensalesorder.item_number = items.ItemName  
 WHERE items.ItemType = 'Stock' and opensalesorder.status NOT LIKE 'on po'
 group by opensalesorder.item_number;

上的where条件opensalesorder是“撤消” right join. 该值NULL将导致它失败。

解决方案是将其移至on子句:

SELECT opensalesorder.so_number,items.VendorName,opensalesorder.item_number
FROM `opensalesorder` right join
     items
     on opensalesorder.item_number = items.ItemName and
        opensalesorder.status NOT LIKE 'on po'
 WHERE items.ItemType = 'Stock'
 group by opensalesorder.item_number;
于 2013-08-13T11:25:56.507 回答