如何在不使用子查询的情况下有效地编写以下查询

时间:2016-10-28 12:34:30

标签: sql

表:A

--------------------------
id    alias1
--------------------------
1     user1
2     user2
3     user3
--------------------------

表:B

--------------------------
id    parent
--------------------------
1     user2
--------------------------

预期产出:

--------------------------
id    alias1
--------------------------
1     user1
2     user2
--------------------------

SQL:

SELECT Id
FROM A
WHERE alias1 IN ((SELECT alias1 FROM A
                  WHERE alias1 = (SELECT b.parent
                                  FROM A a
                                  LEFT JOIN B b ON b.id = a.id
                                   WHERE a.alias1 = 'user1')),
                 'user1' )

如何有效地编写上述查询。我想得到孩子和父母的名单(如果存在)

1 个答案:

答案 0 :(得分:0)

(1)如果您的预期输出与您声明的一致,则SELECT ID不会削减它。

(2)通过将查询重写为SELECT ... UNION SELECT ...

来消除IN子句

(3)通过用适当的JOIN和投影替换它们来消除剩余部分中的子查询。