Select distinct 返回不明确的行

Select distinct returning indistinct rows

Select distinct 是 returning 模糊的行。为什么?

我想 return 不同的商店。

这是我的 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) 不需要区分,因为我想要 return 具有特定产品的商店列表。但商店需要与众不同。

我做错了什么?

只是不要在您的选择中包含 p.p_id

SELECT DISTINCT
       s.*
FROM   shop s
....

返回的行不同。 Distinct 适用于所有返回的行,而不适用于单个列。是的,p_id 两行相同。但是如果你比较所有的列,它们之间是有区别的。
如果您想要不同的商店 - 不要在其他表的 select 列中包含,因为它可能会导致重复,如您的示例所示。

好吧,如果您查看整个输出,您会发现每一行的 p_id(最后一列)都不同。 Distinct 适用于整个记录,而不仅仅是一列。

您可以从 select 中删除 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