2016-10-28 29 views
-1

表:一个如何写下面查询有效地而不使用子查询

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

表:乙

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

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

+5

我在这里没有看到任何逻辑。 –

+0

编辑你的问题并描述你想要查询的内容。 –

回答

0

(1)如果您的预期输出与您声称的一样,那么SELECT ID不会削减它。

(2)通过重写查询作为SELECT ... UNION SELECT消除IN子句...

(3)通过与合适的联接和突起替换它们消除在其余部分中的子查询。