2012-03-29 58 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 
    ) 
)