Mysql 用于3个表的sql SELECT查询
我有三张桌子:Mysql 用于3个表的sql SELECT查询,mysql,sql,select,Mysql,Sql,Select,我有三张桌子: 1. 产品(产品id、名称) 2. 订单(id、订单id、产品id) 3. 因素(id、订单号、日期) 我想在最后两个表中检索产品名称(products.name),其中在date上具有相似的order\u id。 我使用此查询的目的是: select products.name from products WHERE products.product_id ~IN ( SELECT distinct orders.product_id FRO
1. <代码>产品(产品id、名称)
2. <代码>订单(id、订单id、产品id)
3. <代码>因素(id、订单号、日期) 我想在最后两个表中检索产品名称(
products.name
),其中在date
上具有相似的order\u id
。
我使用此查询的目的是:
select products.name
from products
WHERE products.product_id ~IN
(
SELECT distinct orders.product_id FROM orders WHERE
order_id IN (select order_id FROM factors WHERE
factors.datex ='2017-04-29') GROUP BY product_id
)
但没有结果。我的错在哪里?我如何解决这个问题?谢谢在系数表中,列名是日期,所以应该是-
factors.date ='2017-04-29'
你已经写信了-
factors.datex ='2017-04-29'
你的问题应该没问题。我重写它是为了对结构做一些更改,而不是逻辑(这使我更容易理解查询): 有关更改的说明:
- 在查询中使用多个表时,请始终限定列名
- 使用表别名。它们使查询更易于编写和阅读
子查询中的在
和中不需要选择DISTINCT
。中的GROUP BY
逻辑已处理(即忽略)重复项。通过显式地包含这些操作,您可能会遇到效率较低的查询计划的风险
有一个时间组件。如果是这样,那么这将有效factors.datex
date(f.datex)='2017-04-29'
- 在那一天没有任何因素
- 没有与该日期的因素匹配的订单
- 订单中没有与该日期的因素匹配的产品李>
date
,但SQL使用的是列名datex
,谢谢你的回答。我发现我的错误和我的产品ID的插入从一个旧的ID是不正确的。但我和你的问题都是真的…谢谢你的帮助。我还有一个错误。你能在那里帮我吗
select p.name
from products p
where p.product_id in (select o.product_id
from orders o
where o.order_id in (select f.order_id
from factors f
where f.datex = '2017-04-29'
)
) ;