在MYSQL中有两个条件的LEFT JOIN TABLE

时间:2016-01-13 12:57:00

标签: 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

1 个答案:

答案 0 :(得分:1)

SQLFiddle在尝试构建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是&lt; = 1.在示例数据中已提供,唯一具有值&lt; = 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

请注意,唯一的变化是我拿出{{1}} - 我不知道为什么要包含它,因为它会将您的结果集限制为您不想要的内容。