2016-07-28 5 views
0

Ist es möglich, in Sqlite3, SELECT alle Zeilen, die ein Attribut gleich aber ein anderes Attribut ungleich?Alle Zeilen mit Spalte1 = Spalte1 und Spalte2! = Spalte2 abrufen

SELECT count(*),title,katalogove_cislo FROM records GROUP BY katalogove_cislo ORDER BY count(*) 

Zum Beispiel Diese Abfrage gibt gruppierten Zeilen mit gleich katalogove_cislo. Ich möchte diese Gruppen ausschließen, die die gleiche Spalte popis hat.

So

id,katalogove_cislo,popis 
1,444,xxx 
2,444,xxx 
3,555,xx 
4,555,xx 
6,555,xy 

würde eine Gruppe zurückkehren mit katalogove_cislo-555 weil Gruppe 444 popis gleich Spalte hat.

EDIT:

Ich versuche es klarer zu machen.

Wenn ich gruppiere von katalogove_cislo, bekomme ich "Gruppen" mit dem gleichen katalogove_cislo. Jede Gruppe kann mehrere Zeilen mit demselben katalogove_cislo enthalten. Ich möchte nur die Gruppen abrufen, in denen mindestens eine Zeile einen anderen Titel als die anderen Zeilen der Gruppe hat.

id,katalogove_cislo,popis 
1,444,xxx 
2,444,xxx 
3,555,xx 
4,555,xx 
6,555,xy 

Wenn ich Gruppe tun, indem katalogove_cislo auf diesem Tisch, erhalte ich 444 und 555. Aber da Zeilen aus der Gruppe mit katalogove_cislo 444 gleich popis hat (xxx und xxx) Ich möchte nicht, diese Gruppe zu sehen. Zweite Gruppe mit katalogove_cislo 555 hat nicht die gleichen Titel - xx == xx! = Xy, also möchte ich diese Gruppe zurückgeben.

Antwort

1

Basierend auf Ihrer aktualisierten Frage sollte dies funktionieren. Dadurch werden Datensätze eliminiert, bei denen nur ein distinct Auftreten des Werts in popis vorliegt.

SELECT 
    -- This returns the original values from the source table 
    tb.id, 
    tb.katalogove_cislo, 
    tb.popis 
FROM 
    (
    -- This will return only values in katalogove_cislo where 
    -- there are more than 1 distinct values in popis. 
    SELECT 
     katalogove_cislo, 
     COUNT(DISTINCT popis) AS popis_count 
    FROM 
     records 
    GROUP BY 
     katalogove_cislo, 
    HAVING 
     COUNT(DISTINCT popis) > 1 
    ) ta 
INNER JOIN 
    records tb 
    ON (ta.katalogove_cislo = tb.katalogove_cislo) 

Beginnend mit diesem Datensatz:

id | katalogove_cislo | popis 
----------------------------- 
1 | 444   | xxx 
2 | 444   | xxx 
3 | 555   | xx 
4 | 555   | xx 
5 | 555   | xy 

Die Abfrage zurückgeben sollte:

id | katalogove_cislo | popis 
----------------------------- 
3 | 555   | xx  
4 | 555   | xx 
5 | 555   | xy 
+0

Danke für die Antwort. Um klar zu sein - ich möchte Zeilen unter dieser Bedingung erhalten: Wenn es eine Gruppe von Zeilen gibt, die dasselbe katalogove_cislo hat, dann, wenn alle diese Zeilen nicht den gleichen Titel haben, gebe das katalogove_cislo zurück. Ich möchte Zeilen mit dem gleichen katalogove_cislo, aber nicht den gleichen Titel. –

+0

@Milano - Es ist nicht 100% klar für mich, was Sie fragen. Können Sie Ihren Beitrag mit weiteren Informationen und Details zu Ihrem Tabellendesign und den Daten aktualisieren? – Nicarus

+0

Ich habe versucht, es mehr zu erarbeiten, bitte, überprüfen Sie die Unterseite der Frage. Danke –

0

Sie möchten über alle Zeilen einer Gruppe zu überprüfen, Sie folgende Logik anwenden müssen:

SELECT 
    count(*) AS cnt, 
    katalogove_cislo 
FROM 
    records 
GROUP BY 
    katalogove_cislo 
HAVING -- at least two different values 
    MIN(popis) <> MAX(popis) 
ORDER BY 
    cnt 
Verwandte Themen