2016-06-22 7 views
1

я следующий запрос,Удалить Intersect из запроса, использовать внутреннее соединение вместо него, и результат должен быть союз с третьей одной

(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) 

Теперь, я не хочу использовать intersect, вместо этого я хочу использовать inner join

Таким образом преобразовать этот запрос к следующему

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) 

в этом случае я получил следующее сообщение об ошибке:

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

ответ

1

Потому что вы присоединились, и вы используете SELECT *, запрос возвращает записи в формате

STUDENT_ID | STUDENT_ID 

И второй запрос возвращает только один столбец.

Используйте это:

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

В этом случае я получил следующую ошибку: Неверный синтаксис рядом с ключевым словом «как». –

+0

У меня даже нет «как» здесь, поэтому на самом деле это не имеет смысла. @QuestionWarriors – sagi

+0

Я редактировал вопрос, предположим, что есть 2 пересекаются & 1 союз тогда? @sagi –

0

Вероятно, есть разница между колоннами. Когда вы используете UNION, выбранные столбцы должны быть одинаковыми, у вас есть * в первом select и student_id в последнем (под объединением).

 Смежные вопросы

  • Нет связанных вопросов^_^