2015-07-20 145 views
0

我試圖運行基於條件的子查詢:MySQL的條件子查詢

SELECT `table1`.`id`, (
    SELECT `table2`.`name` 
    FROM `table2` 
    WHERE `table2`.`id` = `table1`.`table2_id` 
) 

table2_id不是0

有條件所以,如果它是零,只有table1id被選中,否則table1idtable2name得到選擇性檢測。假設我稍後會內部加入表格。

我試過CASE THENIF(),但我無法使語法工作。

我使用MySQL 5.5

+2

幾乎可以肯定完成什麼導致你後一個更好,更直接的方式。 SQL查詢的列在某些要求上是有條件的,這往往是壞表設計的標誌,因爲精心設計的數據庫模式永遠不會需要這樣的條件。另請參閱[什麼是XY問題?](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) –

+0

我不認爲你可以有結果架構依賴於查詢;查詢結果的模式對於所有行必須是統一的。不過,你可以使用'CASE'在'table2_id'爲0時選擇'NULL'。那是你要的嗎? – Patrick87

+0

@羅伯特哈維,在兩個查詢中,是的。但是我在Node中並且一個接一個地查詢鏈接的查詢很快就失控了。我希望有一個純粹的SQL解決方案。我歡迎你提出建議,認爲。 @ Patrick87,不完全。如果'table1'.'table2_id'不是0,我想要連接表。 – Lev

回答

0

所以,它聽起來就像你只是想離開加入到表2?這意味着它會顯示所有table1.id,如果表2與它匹配否則將顯示這將是空

SELECT table1.id, table2.name 
From table1 
Left join table2 
on table1.table2_id = table2.id 
+0

這個問題是,如果'table.table2_id'爲0,它會返回一個空集,因爲沒有'table2.id' = 0。至少這是我的經驗。 – Lev

+0

我剛剛瞭解到左連接和內連接的區別。非常感謝你! – Lev