Mysql左联接仅在一个表中使用where子句检查记录

彼得

我正在尝试通过检查product.pid表中是否存在商品来检查查看当前产品的用户是否已经购买了该产品order.opid以下查询无需添加AND o.buyer = 'peter'where子句即可工作,但对于我针对当前查看该产品的用户验证查询非常重要。

产品展示

pid   | pname 
------|--------------
100   | Toyota
200   | Lexus

订购

oid  | opid  | buyer  | opname  | color
-----|-------|------------------|-------
M10  | 100   | peter  |Toyota   | red
M11  | 100   | peter  |Toyota   | black
M12  | 100   | john   |Toyota   | black
M13  | 200   | peter  |Lexus    | black

SQL查询

SELECT * FROM Products p
LEFT JOIN order o
ON p.pid = o.opid
WHERE p.pid = 100
AND o.buyer = 'peter'
戈登·利诺夫

第二个表上的条件需要放在on子句中:

SELECT *
FROM Products p LEFT JOIN
     order o
     ON p.pid = o.opid AND o.buyer = 'peter'
WHERE p.pid = 100;

这看起来似乎很神秘,但是规则很容易学习。Aleft join将所有行保留在第一个表中,无论该ON子句的计算结果为true,false还是NULL但是,第二个表中的值变为NULL,因此该WHERE子句筛选出了不匹配的购买者,从而将外部联接变为内部联接。

同样的道理也解释了为什么第一个表的条件应该放在WHERE子句中而不是ON子句中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在PHP中使用WHERE子句和多个左联接

MySQL-使用WHERE IN子句联接2个表

左联接只返回一个记录

有没有一种方法可以使用子句“内部联接”联接两个表,然后再使用多个“左联接”子句

mysql,多个表使用WHERE子句联接

不确定在查询中使用什么:左联接-内部联接-Where子句

一个左联接的4表查询

mysql查询速度非常慢:左联接多个表,每个表的where子句

使用 where 子句 mysql 将数据从一个表传输到另一个表

在MySQL上使用2个ID在同一张表上多次左联接

使用id mysql左联接两个表

我如何在一个表中的最后一条记录使用Laravel where子句?

使用NOT IN的另一个表中的WHERE子句

从一个表中使用与另一个表自然联接的字段来从一个表中删除mySQL?

左联接,不使用3个表的左联接

SQL Server:具有一个或多个WHERE子句的多个表联接

使用ON子句中的OR在一个或另一列上的完整外部联接表

如何将MYSQL左联接和分组依据合并为另一个表

左联接但保持一个观察

将左联接的结果联接到另一个表

MySQL:在where子句中使用联接表列值

使用where子句更新2个表的内部联接

检查MySQL中where子句限制的两个表时,如何仅从一个表的列中选择数据

使用两个表进行内部联接,将结果与另一个表进行左联接

Mysql在同一查询中加入2个表。内联接还是左联接?

使用sql中的where子句创建左联接条件

使用WHERE子句的GROUP BY和SQL中的OR进行左联接

如何在MySQL中执行此查询,我应该使用左联接还是右联接或内部联接使用哪一个?

Laravel-从一个表中获取不存在的记录,并附加一个where子句