2016-10-28 55 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)通過與合適的聯接和突起替換它們消除在其餘部分中的子查詢。