2012-08-10 139 views
-1

我有3個表:表1,表2,表3多個子查詢

我想要使用表1的結果作爲表2的約束查詢,表2的結果如表3的約束

所以我的查詢現在是這樣的:

SELECT tb3.id 
FROM tb3 
WHERE tb3.tag = (
        SELECT tb2.num 
        FROM tb2 
        WHERE tb2.name = (
             SELECT tb1.user 
             FROM tb1 
             WHERE check = '0' 
            ) 
       ) 

例如,

TB1具有項 'tb1.check', 'tb1.user';

tb2有項目'tb2.num','tb2.name';

tb3有項目'tb3.tag','tb3.id';

第一校驗TB1爲數據,其中 'tb1.check'= 0,則得到其 'tb1.user',

然後檢查TB2進行數據其中 'tb2.name'= 'tb1.user',並獲得'tb2.num',

等,檢查數據TB3其中 'tb3.tag'= 'tb2.num' 然後得到 'tb3.id'

,但我得到的是空的,任何幫助嗎?而不是子查詢作爲

+3

「,但我不能讓我想要什麼「你有錯誤嗎?錯誤的結果?你能否展示一些示例數據並顯示你想要的,以及你得到的是什麼? – 2012-08-10 09:29:30

+0

結果僅爲空 – 2012-08-10 09:32:15

+0

空結果對於該查詢而言是完全有效的結果。它是否返回行取決於你有什麼數據。你能否顯示你的表格結構和一些示例數據,並解釋你對這些數據的期望結果?例如, – 2012-08-10 09:33:53

回答

3

使用INNER JOIN

SELECT tb3.id 
FROM tb3 
    INNER JOIN tb2 
     ON tb3.tag = tb2.num 
    INNER JOIN Invitation inv 
     ON tb2.name = inv.user AND 
      inv.check = 0; 
+0

感謝您的幫助;) – 2012-08-16 07:09:29

+0

不客氣! :) – Omesh 2012-08-16 07:14:35

2

其實你可以做,使用JOIN

SELECT tb3.id 
FROM tb3 
     INNER JOIN tb2 
      ON tb3.tag = tb2.num 
     INNER JOIN Invitation inv 
      ON tb2.name = inv.user 
WHERE inv.check = 0 
+0

感謝您的幫助;) – 2012-08-16 07:14:36

1

試試這個...

SELECT tb3.id 
FROM tb3,tab2,tab1 
WHERE tb3.tag = tb2.num and 
tb2.name = tb1.user and 
tb1.check = '0' 
+0

是的,儘管使用JOIN來區分來自WHERE連接的真實WHERE過濾器更爲正確。 – halfer 2012-08-10 10:28:08

+0

感謝您的幫助;) – 2012-08-16 07:21:16