我是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作为值(当产品未被保留时)。
编辑:感谢大家的帮助!每个答案对我来说都很有效,稍作修改:)
答案 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