我有两张桌子:opensalesorder和items.
我想基于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)
即使左侧没有匹配,右连接也会从右表返回结果.
查询是对的吗?
谢谢
这是您的查询:
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)
| 归档时间: |
|
| 查看次数: |
4451 次 |
| 最近记录: |