2012-03-29 31 views
2

我有一個查詢在其where子句中包含select語句。我現在的問題是,我怎樣才能訪問父母的select的數據。在where子句中選擇對當前父選擇列的訪問

實施例:

select * from TABLE_1 as t1 INNER JOIN TABLE_2 as t2 
where (... and ...) OR 
     (not exists(select * from TABLE_3 as t3 
           inner join TABLE_1 ON t3.t1_id = t1.id 

最後一行是在錯誤發生時:t1.id is not a column

如何從表t1訪問當前值? 我使用MySQL 5.1中

+0

你能發佈完整的查詢嗎? – Teja 2012-03-29 14:50:43

+1

您需要將內部table_1作爲t4,並且具有以下條件ON t3.t1_id = t4.id其中t4.id = t1.id – 2012-03-29 14:51:35

回答

1
SELECT 
    * 
FROM 
    TABLE_1 as t1 
    INNER JOIN TABLE_2 as t2 ON 
    t2.PK = t1.FK --Whatever your keys are 
WHERE 
    (... and ...) 
    OR 
    (
    NOT EXISTS (select * from TABLE_3 as t3 WHERE t3.t1_id = t1.id) 
) 
+0

我在JOIN TABLE_2中添加了ON子句,因爲它在示例中缺少。您的解決方案是檢查TABLE_3中行的存在的相關子查詢未正確編寫。而不是嘗試加入TABLE_1,您只需通過t1別名使用該列。 – 2012-03-29 14:55:52

0

首先,你需要聲明一下,你會JOIN TABLE_2上TABLE_1。

SELECT * 
FROM TABLE_1 AS t1 
INNER JOIN TABLE_2 AS t2 ON t2.t1_id = t1.id 

t1.id = t2.t1_id只是一個例子,你需要決定你希望你加入哪個列。然後在WHERE條款中,您再也不需要在TABLE_1上INNER JOIN,因爲您已經從中選擇了它。

SELECT * 
FROM TABLE_1 AS t1 
INNER JOIN TABLE_2 AS t2 ON t2.t1_id = t1.id 
WHERE (... AND ...) OR 
(
    NOT EXISTS 
    (
     SELECT * 
     FROM TABLE_3 AS t3 
     WHERE t3.t1_id = t1.id 
    ) 
)