表: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' )
如何有效地编写上述查询。我想得到孩子和父母的名单(如果存在)
答案 0 :(得分:0)
(1)如果您的预期输出与您声明的一致,则SELECT ID不会削减它。
(2)通过将查询重写为SELECT ... UNION SELECT ...
来消除IN子句(3)通过用适当的JOIN和投影替换它们来消除剩余部分中的子查询。