2015-09-27 47 views
0

我有兩個表。我想選擇表1中的所有行和表2中共享相同ID的任何行。我需要返回表1中的行,如果它們存在,則分別返回表1和表2中的連接行。如果表2中沒有匹配,我下面的當前代碼返回表1中的行。但是,如果表2中存在匹配,它將只返回連接的行。SQL從第一個表中返回行,然後分開加入表

SELECT 
    table1.id, 
    COALESCE(table2.name, table1.name) AS name 
FROM 
    table1 
LEFT JOIN 
    table2 
ON 
    table1.id = table2.id 
WHERE 
    table1.stock = 0 

這裏就是我後:

**Table 1** 
id | name | stock 
101 | sock | 4 
102 | hat | 0 
103 | belt | 0 

**Table 2** 
id | name 
101 | banana 
102 | pear 
102 | apple 

**Query output** 
id | name 
102 | hat 
102 | pear 
102 | apple 
103 | belt 
+2

表結構,樣本輸入和所需輸出 – amdixon

+0

您所需的輸出和您的描述似乎沒有任何關係。您的描述從返回第一個表中的所有行開始,但101不在輸出中。 –

+0

修好了 - 歡呼聲 – cianz

回答

0

從你的輸出,據我瞭解,你想要的東西就像兩個表,其中表一中的ID爲0一隻股票的所有行。

select id, name 
from table1 
where stock = 0 
union all 
select id, name 
from table2 t2 
where exists (select 1 from table1 t1 where t1.id = t2.id and t1.stock = 0); 
相關問題