选择不同的返回隐隐约约的行

时间:2016-05-25 07:40:17

标签: mysql select distinct

选择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' 

结果如下:

enter image description here

产品(p.p_id)不需要区分,因为我想返回具有特定产品的商店列表。但商店需要与众不同。

我做错了什么?

3 个答案:

答案 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