2016-12-05 34 views
-2

比方說,我有使用PostgreSQL的數據庫與表A如何在SQL中查詢有兩種不同情況的數據庫?

{Name, Value, Id}  
{Bob, 0, 101}  
{Frank, 1, 102}  
{Jeff, 2, NULL}  
{Paul, 3, 103} 

而且表B

{Name, Value, Id} 
{Bob, 0, 100} 
{Bob, 0, 101} 
{Frank, 1, 100} 
{Frank, 1, 102} 

我想做

FROM TableA INNER JOIN TableB 
ON TableA.Id=TableB.Id 

然而,表B沒有按」 t顯示Id = NULL的數據。

我想回報

{Bob, 0, 101} 
{Frank, 1, 102} 
{Jeff, 2, NULL} 

我怎樣才能做到這一點?

+0

@ chris85我不認爲你可以只用'JOIN' –

+0

你問什麼是不清楚解決這個問題。爲什麼在結果集中包含NULL id的好處,但id 103不是?在表B中沒有匹配。 – Tony

+0

表A包含一組數據,而TableB包含完全不同組的數據,但兩個表可以重疊。 – ButterJones

回答

0

使用left加入,而不是innerinner需要匹配left表和rightNULL不匹配。

select a.name, a.value, a.id FROM a 
left JOIN b 
ON a.Id = b.Id 

演示:http://sqlfiddle.com/#!9/24b08/4

輸出:

Name Value Id 
Bob  0  101 
Frank 1  102 
Jeff 2  (null) 
+0

哦,我用了錯誤的'B'數據。 – chris85

+0

完美。我的SQL中實際上有兩個JOINS,但我沒有意識到我需要在兩個連接中的每一個上執行LEFT JOIN。當我第一次做到這一點時,我只在第一個JOIN上做了LEFT JOIN,而在第二個JOIN上做了一個INNER JOIN,但沒有成功。 – ButterJones

+0

@JuanCarlosOropeza它與糾正數據一起炒作,'A'不會尋找'100',因爲裏面沒有'100'。 http://sqlfiddle.com/#!9/14b8c/3 – chris85

0

Sql DEMO

SELECT A.* 
FROM TableA A 
JOIN TableB B 
    ON A.Name = B.Name 
AND A.Value = B.Value 
AND A.Id = B.Id 

UNION ALL 

SELECT A.* 
FROM TableA A 
WHERE A.Id IS NULL 

輸出

enter image description here

+0

這也適用,除非我遇到了在具有不同列數的兩個表上執行UNION的問題,因爲我從多個表中提取數據。 – ButterJones

+0

那麼這解決你的問題。克里斯回答額外的行。所以要麼你提出錯誤的問題,要麼選擇錯誤的答案是正確的。 –

+0

@JuanCarlosOropeza也許都是 – Tony

相關問題