右连接查询不起作用

Pra*_*tik 4 mysql sql

我有两张桌子: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
Run Code Online (Sandbox Code Playgroud)

但是我也想要'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
Run Code Online (Sandbox Code Playgroud)

即使左侧没有匹配,右连接也会从右表返回结果.

查询是对的吗?

谢谢

Gor*_*off 9

这是您的查询:

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;
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)