2012-10-16 191 views
3
select t1.table1 from table1 as t1 
where t1.column1 
in 
(
    select t2.column2 from table2 as t2 
    join 
    table3 as t3 on t2.column1=t3.column1 
    where t3.columnx=5 
); 

上面是我正在發射的mysql查詢。也希望從子查詢表中獲取一些數據。從子查詢中選擇數據mysql

例如說t2表中的columnxy。失敗

select t1.table1,t2.columnxy from table1 as t1 
where t1.column1 
in 
(
    select t2.column2 from table2 as t2 
    join 
    table3 as t3 on t2.column1=t3.column1 
    where t3.columnx=5 
); 

如果我有選擇的外部查詢的添加它們

查詢提供了錯誤「未知列」,這有一定道理。

是正確的方式還是應該用連接重寫查詢?

+1

顯示失​​敗查詢 - 我們可以建議更好 – BugFinder

+0

補充說,失敗的查詢。 – amitchhajer

回答

3

重寫查詢與聯接:

SELECT t1.table1, t.columnxy 
FROM table1 AS t1 JOIN (
    SELECT t2.column2, t2.columnxy 
    FROM table2 AS t2 JOIN table3 AS t3 USING (column1) 
    WHERE t3.columnx = 5 
) t ON t1.column1 = t.column2 

或者:

SELECT t1.table1, t2.columnxy 
FROM table1 AS t1 
    JOIN table2 AS t2 ON t1.column1 = t2.column2 
    JOIN table3 AS t3 ON t2.column1 = t3.column1 
WHERE t3.columnx = 5 
+0

做了詭計,非常感謝。第二個更清潔。 – amitchhajer

1

t2在該點不可用。你應該爲此使用連接。使用t1.column1 = t2.column2應該這樣做。

+0

沒錯,那是我遇到的問題,正在尋找解決方法。 – amitchhajer