WHERE Abfrage über mehrere Zeilen

Tommy57

Erfahrenes Mitglied
Hallo,

ich habe eine Tabelle mit Autos, wo jede ID einem Typen OHNE Baujahr entspricht.

In einer zweiten Tabelle habe ich AutoID, Baujahr und Preis, wo ich nun ALLE AutoIDs abfragen möchte, die es genau in den Baujahren 1998, 1999 und 2000 gibt.

Hat da jemand eine Idee, wie das gehen soll?

Gruß, Tommy
 
Jepp. Du brachst die erste Tabelle gar nicht.

SQL:
SELECT
    autoIid
FROM
    table2
WHERE
    baujahr IN (1998, 1999, 2000)

Ok, du willst wahrscheinlich noch die AUto-Infos dazuhaben. Dann gibts ein INNER JOIN
SQL:
SELECT
    t2.autoIid
    t1.type,
    t1.marke
FROM
    table2 AS t2
    INNER JOIN table1 AS t1
        ON t2.autoid = t1.id
WHERE
    t2.baujahr IN (1998, 1999, 2000)
 
Zuletzt bearbeitet von einem Moderator:
Hallo Yaslaw,

IN ist doch eine ODER Verknüpfung?

Also ich brauche ja die AutoIDs, die genau ALLE Baujahre besitzen und nicht nur eins von denen.

Gruß, Tommy
 
Aso. Alles klar. Dort ist das Problem behoben.

Filtern, Gruppieren und Zählen

SQL:
SELECT
    autoid
FROM
    table2 t2
WHERE
    t2.baujahr IN (1998, 1999, 2000) 
GROUP BY
    autoid
HAVING
    count(*) = 3
 
Zuletzt bearbeitet von einem Moderator:
Hi Yaslaw,

irgendwas stimmt da nicht. Also ich kriege da komplett wirre Ergebnisse.

Wenn ich die Auto IDs nun nach Baujahren überprüfe, habe ich meist exakt nur EINEN Treffer.

Sogar folgendes Statement liefert Ergebnisse:

Code:
SELECT
    autoid
FROM
    table2 t2
WHERE
    t2.baujahr IN (789, 98765, 2000) 
GROUP BY
    autoid
HAVING
    COUNT(*) = 3

Gruß, Tommy
 
Ich geh von MySQL aus. Du Auch?
Ist Baujahr Varchar?

Mein Test funktioniert
SQL:
SELECT
	autoid
FROM
	-- Tabelle simulieren
	(
		SELECT 1 AS autoid, 1972 AS baujahr
		UNION SELECT 1 AS autoid, 1973 AS baujahr
		UNION SELECT 1 AS autoid, 1974 AS baujahr
		UNION SELECT 1 AS autoid, 1975 AS baujahr
		UNION SELECT 1 AS autoid, 1976 AS baujahr
		UNION SELECT 2 AS autoid, 1973 AS baujahr
		UNION SELECT 2 AS autoid, 1974 AS baujahr
		UNION SELECT 2 AS autoid, 1977 AS baujahr
		UNION SELECT 2 AS autoid, 1978 AS baujahr
	) AS t1
WHERE
	baujahr IN (1972, 1973, 1974)
GROUP BY
	autoid
HAVING
 COUNT(*) = 3

-- gibt 1 zurück
 
Zuletzt bearbeitet von einem Moderator:
Also ich benutze Postgres und dein Beispiel funktioniert.

Teste ich vergleichbare Statements an anderer unserer Tabellen, klappt es auch. Aber das Statement, bei der Tabelle, wo ich es brauche, funktioniert nicht. Kann das vielleicht daran liegen, dass die Tabelle partitioniert ist, was ich aber nicht glaube. Oder vielleicht eine andere Idee, woran es liegen kann. Die Ergebnisse, die ich kriege, sind wirr und haben meist nur eine Übereinstimmung.

Gruß, Tommy
 
Sorry, kenne Postgres nicht.

- Wie schon beschrieben - ist Baujahr als Nummer gespeichert?

- Hast du ev. mehrere Einträge mit der gleichen Kombination autoid/baujahr?
 
- Wie gesagt, funktioniert identisch.

- Ja, sind Zahlen.

- Ja, ich habe tausende Einträge mit der gleichen Kombination autoid / baujahr.


EDIT: Wenn ich vorher ein GROUP BY über ein Subquery mache, dann funktioniert es. Der Fehler lag darin, dass es mehrere Einträge mit der gleichen Kombination gab.

Vielen Dank!
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück