mysql查询获取没有用户订单的所有产品

时间:2015-05-20 12:40:01

标签: php mysql

我有一个Products表和一个Orders表定义,我可以按以下方式执行JOIN查询,以返回特定用户零订单的产品。

此查询有效,但速度非常慢。

select * from products where id not in (select product_id from orders where user_id = 1)

问题是,如何以更好的方式更快地编写相同的查询?

3 个答案:

答案 0 :(得分:1)

您应该可以执行简单的LEFT JOIN

SELET * FROM products 
 LEFT JOIN orders ON (orders.product_id=products.id and orders.user_id=1)
 WHERE orders.id IS NULL;

答案 1 :(得分:1)

不需要子查询:

SELECT p.product_id
FROM
   Products p 
   LEFT JOIN Order o ON p.product_id = o.product_id AND o.user_id = @UserId
WHERE
   o.order_id IS NULL -- or any other field that cannot be null on Order

编辑:为了提高性能,您可能还需要检查订单user_id列和您的ID上是否有索引(更有可能在那里有它们,可能还有聚簇索引,都值得检查)

答案 2 :(得分:0)

SELECT P.*
FROM products P
LEFT JOIN (SELECT product_id from orders where user_id = 1) O
ON P.id = O.product_id
WHERE O.product_id IS NULL