我在尝试找出一个查询时遇到问题,该查询允许我显示所有产品的列表,以及显示用户是否保存了任何特定产品。
我有3个表参与查询(users,product_user,product)。 我通过加入三个表并使用以下查询检查user_id是否为null来确定用户是否已保存产品:
SELECT products.*, users.id as 'user_id' FROM products
LEFT JOIN product_user ON products.id = product_user.product_id
LEFT JOIN users ON product_user.user_id = users.id AND users.id =1;
但是,当用户保存产品(user_id null版本和user_id = 1版本)时,这会返回重复的行。不同的语句不起作用,因为在这种情况下行不是不同的。什么是确保我只收回不同产品的最佳做法?我需要取回整个产品列表,无论用户是否保存了它。
这是在mysql中查询的。
答案 0 :(得分:1)
我认为这可以满足您的需求:
select p.*,
(select pu.user_id
from product_user pu
where pu.product_id = p.id and pu.user_id = 1
limit 1
) as user_id
from products p;
每product
只返回一行。该行只有user_id
- 只有一次,它必须匹配您传入的任何内容。