SQL-запросы: запросы в зависимости от предыдущих запросов и результатов объединения - PullRequest
0 голосов
/ 22 сентября 2011

Следующая проблема:

Запрос 2 и Запрос 3 зависят от результатов запроса 1, а запрос 4 зависит от результатов запроса 2. Как бы вы выразили эти запросы, не выполняя один и тот же запрос несколько раз?

Пример:

Запрос 1

SELECT id, color, part FROM T1

Запрос 2

SELECT id, owner FROM T2 WHERE T2.color in (SELECT id, color, part FROM T1)

Запрос 3

SELECT id from T3 where T3.part in (SELECT id, color, part FROM T1)

Запрос 4

SELECT id from T4 where T4.owner in (SELECT id, owner FROM T2 WHERE T2.color in (SELECT id, color, part FROM T1))

edit

В конце мне нужнообъединение результата

Query1 union Query2 union Query3 union Query4

Теперь, как вы видите, я скопировал и вставил предыдущие запросы, должен быть лучший способ сделать это.

Ответы [ 2 ]

1 голос
/ 22 сентября 2011

Просто соедините их по определенным столбцам.

select * from T1  
inner join T2  on T1.color=T2.color 
inner join T3 on T3.part=T1.part 
inner join T4 on T4.owner=T2.owner
0 голосов
/ 22 сентября 2011

Вам действительно нужны четыре разных набора результатов? Сколько строк вы ожидаете в каждом наборе и какие типы объектов T1, T2, T3, T4 - потому что может быть возможным объединить эти запросы в один набор.

Кроме того, это:

SELECT id, owner FROM T2 WHERE T2.color in (SELECT id, color, part FROM T1)

неверный SQL, вы, вероятно, имеете в виду:

SELECT id, owner FROM T2 WHERE T2.color in (SELECT color FROM T1)
...