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'
                                           ) 
                      ) ;