2016-01-13 52 views
-3

我有兩個表,我想要連接,A和B.但引用只顯示一個條件。在MYSQL中有兩個條件的左連接表

表A

id | name 
    1 | name1 
    2 | name2 
    3 | name3 
    4 | name4 
    5 | name5 

表B

id | value 
1 | 2 
2 | 4 
4 | 0 

的 「ID」 列中,B錶鏈接的表格中只有3行,我想告訴所有的A的表記錄及其值(如果B表中沒有相同ID的記錄,則爲NULL)

這是我的sql查詢:

SELECT A.*, B.* 
FROM A LEFT JOIN B 
ON A.id=B.id AND B.value<=1 
ORDER BY A.id; 

它顯示了所有表中的行,但所有的值爲NULL:

我想告訴所有表的記錄,其高於0

像這個值:

id | name | value 
1 | name1 | 2 
2 | name2 | 4 
3 | name3 | NULL 
4 | name4 | 0 
5 | name5 | NULL 
+1

鑑於您提供的樣本數據,您希望從您的工作查詢中看到什麼? – Kritner

+0

爲什麼你把這個條件和B.value <= 1? –

+0

爲什麼[tag:mysql]和[tag:sql-server]都被標記了? – Kritner

回答

1

SQLFiddle貌似是有問題試圖建立一個的時候,但考慮到以下幾點:

create table #tablea (id int, name varchar(50)) 
insert into #tablea (id, name) 
select 1, 'name1' 
union all 
select 2, 'name2' 
union all 
select 3, 'name3' 
union all 
select 4, 'name4' 
union all 
select 5, 'name5' 

create table #tableb (id int, value int) 
insert into #tableb (id, value) 
select 1, 2 
union all 
select 2, 4 
union all 
select 4, 0 

SELECT A.*, B.* 
FROM #tablea A LEFT JOIN #tableb B 
ON A.id=B.id AND B.value<=1 
ORDER BY A.id; 

DROP TABLE #tablea 
DROP TABLE #tableb 

您發佈的查詢:

SELECT A.*, B.* 
FROM #tablea A 
LEFT JOIN #tableb B 
ON A.id=B.id AND B.value<=1 
ORDER BY A.id; 

將返回:

id name id  value 
---- 
1 name1 NULL NULL 
2 name2 NULL NULL 
3 name3 NULL NULL 
4 name4 4  0 
5 name5 NULL NULL 

所有空,你說。它所返回的結果與您所寫的查詢是正確的。

SELECT A.*, B.* 
FROM #tablea A 
LEFT JOIN #tableb B 
ON A.id=B.id AND B.value<=1 
ORDER BY A.id; 

指出上面,從table atable b選擇所有列。 table A應該僅加入到table b其中的ID匹配value被< = 1。在您所提供的樣本數據,其具有的< = 1的值的唯一的行,是ID 4.因此,爲什麼ID 4是您的查詢中唯一輸出的value - 這是table B中唯一符合您的加入標準的行。

現在,這只是解釋你爲什麼得到你所得到的。它仍然不清楚你什麼想要得到。

請注意,以上是sql-server作爲您的帖子中的原始標籤之一 - 看起來像它實際上是mysql,但仍然適用相同的想法。

根據您的編輯,和你真正想要的數據,只是改變你的查詢到這一點:

SELECT A.*, B.* 
FROM A LEFT JOIN B 
ON A.id=B.id 
ORDER BY A.id; 

注意到,唯一的變化是我拿出AND B.value<=1 - 我沒有一個想法,爲什麼這被包括在內,因爲它將你的結果集限制在你不想要的東西上。