2014-03-05 59 views
0

以下查詢在所有3個表中都有狀態爲'1'的行時正常工作,但如果其中一個表沒有具有狀態「1」的行,則整個查詢返回空,即使其他表具有請求狀態的行。MySql:在一個查詢中從多個未連接的表中選擇

SELECT 
table1.row_id as rowsone, 
table2.row_id as rowstwo, 
table3.row_id as rowsthree 

FROM 
table1, 
table2, 
table3 

WHERE table1.status = 1 AND table2.status = 1 AND table3.status = 1 
+0

請包括示例數據以演示您希望用於不同輸入的輸出。另外,請研究'LEFT JOIN'來代替'',''的使用。 「不加入」表是不可能的,你目前使用的是'CROSS JOIN',它使用1992年替換的語法。 – MatBailie

+0

這些表沒有加入,它們都有彼此無關的數據,但每個都有狀態爲了自己的目的。我只需要從全部三個表中的一個結果中獲得狀態爲'1'的所有數據。但令人困惑的是。 – qwaz

+0

你可能不想加入表格,但是你寫的是加入表格。你寫的東西與'... FROM table1相同'CROSS JOIN table2 CROSS JOIN table3 WHERE ...'*(注意在那裏重複使用單詞JOIN)*。我強烈建議您向我們展示三種輸入表的內容在各種情況下的樣子,然後向我們展示您想要的結果。 – MatBailie

回答

0

由於workarround如果你知道只有一個行如果所有的表都有不同數量的記錄,你可以使用子查詢

SELECT (SELECT title from table1 WHERE status =1), 
     (SELECT title from table2 WHERE status =1), 
     (SELECT title from table3 WHERE status =1) 
FROM DUAL; 

...你要想想什麼樣的你想要的結果。可能類似於MySQL中不支持的full outer join。做出幾個查詢會更快,更優雅。

+0

假設每個表只有一個記錄具有'status = 1'。 – MatBailie

+0

是的,因爲似乎沒有一個簡短的方法,那麼我想我將不得不爲每個表使用單獨的查詢。感謝您的建議。 – qwaz

1

我認爲你的文件有什麼問題是我們都知道所有表單獨運行,但所有的表都有一個相同的字段名稱「狀態」的權利,使用AND條件是所有的條件如果不能滿足整個的這將導致一個錯誤的值或在您的情況下0的條件必須得到滿足,那麼我建議是這樣的:

選擇 table1.row_id爲rowsone, table2.row_id as rowstwo, table3.row_id as rowsthree

FROM table1, ta ble2, 表3

WHERE狀態= 1

與此代碼它檢查表1,2和3,如果他們有一個的狀態。

相關問題