gpt4 book ai didi

Mysql left join只在一个表中使用where子句查询记录

转载 作者:行者123 更新时间:2023-11-29 07:36:57 26 4
gpt4 key购买 nike

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

产品

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'

最佳答案

我没有发现查询有任何问题。

我运行了上面的查询

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

只有当买家是peter时才会产生响应。

但它不是一个优化的查询,因为在这里您首先获取所有结果,即使数据不存在于订单表中,并且买家和其他信息为 null,然后使用 where 子句优化它以删除买家不是 peter 的那个。相反,

SELECT * FROM Products p  INNER JOIN order1 o ON p.pid = o.opid WHERE p.pid = 1 AND o.buyer = 'peter'

INNER JOIN 返回两个表的所有交集数据。然后 where 子句过滤买家是 peter 的地方

我建议在您的查询中进行一种优化,不要使用买家名称,而是为用户创建一个映射表并存储 userId,因为会有许多用户具有相同的名称。最好把表归一化。

关于Mysql left join只在一个表中使用where子句查询记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48369249/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com