选择distinct返回隐隐约约的行。为什么呢?
我想要回归不同的商店。
这是我的sql语句:
SELECT
DISTINCT s.*, p.p_id
FROM
shop s
INNER JOIN product_shop ps on s.s_id = ps.s_id
INNER JOIN product p ON p.p_id = ps.p_id
WHERE
s.country = 'new zealand'
结果如下:
产品(p.p_id)不需要区分,因为我想返回具有特定产品的商店列表。但商店需要与众不同。
我做错了什么?
答案 0 :(得分:2)
返回的行是不同的。 Distinct应用于所有返回的行,而不是单列。是的,p_id对于两行是相同的。但如果比较所有列,它们之间就存在差异 如果你想要不同的商店 - 不要在其他表的选择列中包含,因为它可能会导致重复,如你的例子。
答案 1 :(得分:1)
请勿在您的选择中加入p.p_id
即。
SELECT DISTINCT
s.*
FROM shop s
....
答案 2 :(得分:1)
好吧,如果您要查看整个输出,可以看到每行的p_id
(最后一列)不同。 Distinct适用于整个记录,而不仅仅是一列。
你可以从你的选择中删除p_id
,或者使用group by来决定你想要的p_id
中的哪一个,也许最多? :
SELECT
s.*, max(p.p_id)
FROM
shop s
INNER JOIN product_shop ps on s.s_id = ps.s_id
INNER JOIN product p ON p.p_id = ps.p_id
WHERE
s.country = 'new zealand'
GROUP BY s.id