2016-05-25 7 views
0

Wählen Sie distinct aus, um undeutliche Zeilen zurückzugeben. Warum?Wählen Sie verschiedene zurückkehrende undeutliche Zeilen aus

Ich möchte verschiedene Geschäfte zurückgeben.

Hier ist meine SQL-Anweisung:

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' 

Hier ist das Ergebnis:

enter image description here

Das Produkt (p.p_id) muss nicht eindeutig sein, da ich eine zurückkehren wollen Liste der Geschäfte, die ein bestimmtes Produkt haben. Aber der Laden muss anders sein.

Was mache ich falsch?

+0

was möchten Sie es zurückgeben? – pppp

+0

Was ist Ihr erwartetes Ergebnis? – Blank

+0

Sie könnten alles entfernen, außer für die erste Spalte und die letzte Spalte, und die Frage würde immer noch Sinn machen, oder? – Strawberry

Antwort

2

Zurückgegebene Zeilen sind unterschiedlich. Distinct wird auf alle zurückgegebenen Zeilen und nicht auf einzelne Spalten angewendet. Ja, p_id ist für zwei Zeilen gleich. Wenn Sie jedoch alle Spalten vergleichen, gibt es Unterschiede zwischen ihnen.
Wenn Sie unterschiedliche Shops möchten - nicht in ausgewählte Spalten aus anderen Tabellen aufnehmen, da dies zu Duplikaten führen kann, wie in Ihrem Beispiel.

1

Geben Sie p.p_id einfach nicht in Ihre Auswahl ein.
I.e.

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

Nun, wenn Sie Ihre gesamte Ausgabe betrachten, können Sie sehen, p_id (die letzte Spalte) ist für jede Zeile unterschiedlich. Eindeutig gilt für den gesamten Datensatz, nicht nur für eine Spalte.

Sie können entweder die p_id aus Ihrer Auswahl löschen, oder verwenden Sie die Gruppe von und entscheiden, welche der p_id Sie wollen, vielleicht max? :

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