簡體   English   中英

在 MYSQL 中具有兩個條件的左連接表

[英]LEFT JOIN TABLE WITH TWO CONDITION IN MYSQL

我有兩個要離開連接的表,A 和 B。但引用只顯示一個條件。

表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;

它顯示了 A 表的所有行,但所有值都是 NULL:

我想顯示所有 A 表的記錄,哪個值大於 0

像這樣:

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

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應僅加入 ID 匹配value <= 1 的table b 。在您提供的示例數據中,唯一具有 <= 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<=1AND B.value<=1 - 我不知道為什么要包含它,因為它會將您的結果集限制為您不想要的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM