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 a
和table 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
- 我沒有一個想法,爲什麼這被包括在內,因爲它將你的結果集限制在你不想要的東西上。
鑑於您提供的樣本數據,您希望從您的工作查詢中看到什麼? – Kritner
爲什麼你把這個條件和B.value <= 1? –
爲什麼[tag:mysql]和[tag:sql-server]都被標記了? – Kritner