I SELECT müssen *, wo verschiedene 'Rua'
mit unterschiedlichen 'CP'
im folgenden DB:alle Spalten aus verschiedenen zwei Spalten SELECT
id Rua Local Conc CP
81143 dos moinhos Rio Tinto Gondomar
81142 dos Moinhos Rio Tinto Gondomar 4435
81141 dos Moinhos Rio Tinto Gondomar 4435
Mit der folgenden Abfrage, ich bin in der Lage, die beiden Säulen zu erhalten:
SELECT Rua, CP
FROM Codigo
GROUP BY Rua, CP
HAVING COUNT(*) = 1
Aber ich möchte alle Spalten. SELECT *
gibt zurück "Die Spalte 'Codigo.id' ist in der Auswahlliste ungültig, da sie weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist." So
stieß ich auf diese Antwort: How do I (or can I) SELECT DISTINCT on multiple columns?
ich nicht für die akzeptierte Antwort ging, wie ich eine schnelle Abfrage benötigen (dies für AJAX Suchvorschläge verwendet werden). Ich habe die andere hochaufgelöste Antwort verwendet. Also, ich erstellt die folgende Abfrage:
SELECT * From Codigo
WHERE (Rua,CP) IN (
SELECT Rua, CP
FROM Codigo
GROUP BY Rua, CP
HAVING COUNT(*) = 1
);
Die gibt einen Ausdruck von nicht-Typ boolean in einem Kontext angegeben, wo eine Bedingung zu erwarten ist, in der Nähe ‚‘ Fehler. Warum erwartet man Rua
nach WHERE
Boolean zu sein? In der Antwort verwendeten sie saleprice
, die nicht boolesch scheinen.
So ist meine Frage, wie kann ich alle Spalten einschließlich die Zeilen mit dem gleichen Rua
und CP
, aber die nur einmal (DISTINCT
) wählen?
Beide arbeiten . Der erste Vorschlag dauert 33 Sekunden, die Sekunden dauern 3 :) Warum so ein Unterschied? – Dillinger
@Dillinger - Weil der Optimierer die Tabelle nur einmal in der zweiten Annäherung scannen/suchen muss –
Ich denke, dass ich die Frage nicht richtig präsentierte. Ich möchte, dass die Zeilen mit der gleichen 'Rua' und' CP' ebenfalls enthalten sind, aber nur einmal. Damit bekomme ich nur Ergebnisse, die 'Rua' und' CP' nicht wiederholt haben. Wenn ich meine Frage bearbeite und behebe, werden Sie Ihre Antwort korrigieren? – Dillinger