SQL查询:查询取决于先前的查询和合并结果

时间:2011-09-22 14:07:25

标签: mysql sql postgresql dependencies

以下问题:

查询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))

修改

最后我需要结果的结合

Query1 union Query2 union Query3 union Query4

现在你可以看到,我复制并粘贴了以前的查询,必须有更好的方法来做到这一点。

2 个答案:

答案 0 :(得分:1)

只需按特定列加入它们。

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

答案 1 :(得分:0)

您真的需要四种不同的结果集吗?您期望在每个集合中有多少行以及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)