2016-06-22 4 views
1

Vereinigung sein Ich habe folgende AbfrageIntersect aus Abfrage, verwenden innere Verknüpfung statt es und Ergebnis sollte mit dritten

(select student_id from student where std = 8) 
intersect 
(select student_id from student where std = 7) 
intersect 
(select student_id from student where std = 9) 
union 
(select student_id from student where std = 10) 

Nun, ich will nicht intersect verwenden, anstatt sie möchte ich verwenden inner join

So wandle ich diese Abfrage zu folgenden

select * from 
(
(select student_id from student where std = 8) 
as res1 inner join 
(select student_id from student where std = 9) 
as res2 on res1.student_id = res2.student_id inner join 
(select student_id from student where std = 7) 
as res3 on res2.student_id = res3.student_id 
) 
union 
(select student_id from student where std = 10) 

In diesem Fall habe ich folgende Fehlermeldung anzeigt:

All queries combined using a UNION, INTERSECT or EXCEPT operator must have an equal number of expressions in their target lists.

Antwort

1

Weil Sie verbunden sind, und Sie verwenden SELECT *, gibt die Abfrage Datensätze im Format

STUDENT_ID | STUDENT_ID 

Und die zweite Abfrage gibt nur 1 Spalte.

verwenden:

select t.student_id 
from student t 
inner join student s 
ON(t.student_id = s.student_id) 
WHERE s.std = 9 and t.std = 8 
UNION 
select student_id from student where std = 10 
+0

In diesem Fall habe ich folgende Fehlermeldung erhalten: Falsche Syntax in der Nähe des Schlüsselwortes 'as'. –

+0

Ich habe nicht einmal "wie" hier, also macht es keinen Sinn. @QuestionWarriors – sagi

+0

Ich habe Frage bearbeitet, Angenommen, es gibt 2 Schnittpunkt & 1 Union dann? @sagi –

0

Wahrscheinlich gibt es einen Unterschied zwischen den Spalten. Wenn Sie UNION verwenden, müssen die ausgewählten Spalten identisch sein. Sie haben * in der ersten Auswahl und student_id in der letzten (unter Union).

Verwandte Themen