SQL连接返回错误表中的所有值

时间:2014-03-18 15:34:34

标签: mysql sql

我是SQL新手,我无法弄清楚为什么我的SQL结果会从错误的表中返回所有数据。我想从产品表中接收所有数据,但我想过滤结果,因此它不会显示那些在另一个表中具有某些价值的结果。

我的SQL语句是:

SELECT * 
  FROM orders 
       JOIN products 
           ON orders.product_id=products.product_id 
           AND NOT order_date=somedate;

此查询返回orders表中的所有内容,其中somedate不是给定值但我想从orders表中获取所有内容,如果orders表没有给定的somedate作为值(当产品未被保留时)。

编辑:感谢大家的帮助!每个答案对我来说都很有效,稍作修改:)

3 个答案:

答案 0 :(得分:1)

我不确定我的问题是否合适,但您可以尝试一下:

SELECT p.* 
  FROM orders 
       JOIN products 
           ON orders.product_id=products.product_id 
 WHERE order_date<>somedate;

答案 1 :(得分:1)

不同的订单可能有不同的日期。如果您想要在特定日期订购的产品,请尝试按如下方式填写查询:

如果我理解正确,您的原始查询会返回包含多个订单的所有产品,因为有些订单是在该日期,有些则不是。

select p.* 
  from product p 
 where not exists (select 1 
                     from orders o 
                    where o.product_id = p.product_id 
                          and o.order_date = somedate)

答案 2 :(得分:1)

您可以获得没有特定条件(order_date != somedate)订单的产品,如下所示:

SELECT p.*
FROM products p
LEFT JOIN orders o ON o.product_id = p.product_id AND order_date != somedate 
WHERE o.id IS NULL