Ich habe 2 Tabellen auf eine bestimmte Weise beizutreten. Ich denke meine Anfrage ist richtig, aber nicht sicher.SQL: 3 Self-Joins und dann verbinden sie
select t1.userID, t3.Answer Unit, t5.Answer Demo
FROM
table1 t1
inner join (select * from table2) t3 ON t1.userID = t3.userID
inner join (select * from table2) t5 ON t1.userID = t5.userID
where
NOT EXISTS (SELECT * FROM table1 t2 WHERE t2.userID = t1.userID AND t2.date > t1.date)
and NOT EXISTS (SELECT * FROM table2 t4 WHERE t4.userID = t3.userID and t4.counter > t3.counter)
and NOT EXISTS (SELECT * FROM table2 t6 WHERE t6.userID = t5.userID and t6.counter > t5.counter)
and t1.date_submitted >'1/1/2009'
and t3.question = Unit
and t5.question = Demo
order by
t1.userID
Von tabelle1 ich verschiedene userID wollen, wo Datum> 1/1/2009
table1
userID Date
1 1/2/2009
1 1/2/2009
2 1/2/2009
3 1/2/2009
4 1/1/2008
Also das Ergebnis ich aus table1 möchte sein sollte: dann will ich
userID
1
2
3
zu verbinden Sie dies auf Benutzer-ID mit Tabelle2, die wie folgt aussieht:
table2
userID question answer counter
1 Unit A 1
1 Demo x 1
1 Prod 100 1
2 Unit B 1
2 Demo Y 1
3 Prod 100 1
4 Unit A 1
1 Unit B 2
1 Demo x 2
1 Prod 100 2
2 Unit B 2
2 Demo Z 2
3 Prod 100 2
4 Unit A 2
Ich möchte mit diesem Ergebnis tabelle1 mit table2 verbinden:
userID Unit Demo
1 B X
2 B Z
Mit anderen Worten,
select distinct userID von table2 wo Frage = Einheit für den höchsten Zähler
und dann
select distinct userID von table2 wo Frage = Demo für den höchsten Zähler.
Ich denke, was ich getan habe, ist 3 Self-Joins dann diese 3 zusammengefügt.
Glaubst du, dass es richtig ist?
Welche RDBMS verwenden Sie? – Quassnoi
"Denkst du, es ist richtig?" - Hat es die richtige Antwort gegeben, als du es ausgeführt hast? – JohnFx
Ich denke, es gibt mir die richtige Antwort, ich habe mich nur gefragt, ob du etwas falsch sehen kannst. Wir sind in SQL 2005. Danke –