mysql - 右连接查询不起作用

标签 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

但我也想要“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

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

查询是否正确?

谢谢

最佳答案

这是您的查询:

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;

opensalesorder 上的where 条件是“撤消”右连接。值 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;

关于mysql - 右连接查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18207802/

相关文章:

mysql - SELECT 使用不同的外键值

mysql - 选择行匹配计算

mysql - 避免空返回集

PHP:远程 MySQL 连接非常慢

mysql - 多sql select语句

php - 如何在 JavaScript 中解析 SQL 查询返回?

Mysql 使用 Limit 使用占位符动态构建查询,如何在存储过程中创建它

sql - 数据库设计: Users with roles and profiles with fields for each role

sql - Oracle级联删除

c# - SqlBulkCopy 在事务内部插入时阻止任何其他对表的写入