mysql:多表联合查询保留空值问题

bao86 2010-12-31 11:22:03
现有三表ABC,三表均只有一字段i,A表里有记录{1,2,3,4,5,6},B表有记录{1,2,3},C表有记录{4,5,6}。
怎样才能查询得到记录类似:

A.i B.i C.i
1 1 -1
2 2 -1
3 3 -1
4 -1 4
5 -1 5
6 -1 6


注:所用数据库为mysql,建表及插入数据语句如下:

CREATE TABLE A(i INT);
INSERT A VALUES (1),(2),(3),(4),(5),(6);
CREATE TABLE B(i INT);
INSERT B VALUES (1),(2),(3);
CREATE TABLE C(i INT);
INSERT C VALUES (4),(5),(6);
...全文
819 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2010-12-31
  • 打赏
  • 举报
回复
mysql> select a.i,ifnull(b.i,-1) ,ifnull(c.i,-1)
-> from a left join b on a.i=b.i
-> left join c on a.i=c.i;
+------+----------------+----------------+
| i | ifnull(b.i,-1) | ifnull(c.i,-1) |
+------+----------------+----------------+
| 1 | 1 | -1 |
| 2 | 2 | -1 |
| 3 | 3 | -1 |
| 4 | -1 | 4 |
| 5 | -1 | 5 |
| 6 | -1 | 6 |
+------+----------------+----------------+
6 rows in set (0.06 sec)

mysql>
bao86 2010-12-31
  • 打赏
  • 举报
回复
谢谢!一楼和三楼。
wwwwb 2010-12-31
  • 打赏
  • 举报
回复
用LEFT JOIN 是比较保险的,你用的是内连接
lxq19851204 2010-12-31
  • 打赏
  • 举报
回复
Select A.i,if(B.i<>'',B.i,-1) as "B.i",if(c.i<>'',c.i,-1) as "C.i"
From A Left Join B on A.i=B.i
Left JOin C on A.i=C.i
bao86 2010-12-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wwwwb 的回复:]
select a.*,IFNULL(b.i,-1) ,IFNULL(c.i,-1)


from a left join b on a.i=b.i
left join c on a.i=b.i
[/Quote]

用if方法可以实现:代码如下:
SELECT DISTINCT a.i AS 'a.i',IF(b.i!=a.i,-1,b.i) AS 'b.i',IF(c.i!=a.i,-1,c.i) AS 'c.i' 
FROM a,b,c
WHERE a.i=b.i AND a.i=c.i OR a.i=c.i AND a.i!=b.i OR a.i=b.i AND a.i!=c.i


能否直接用查询条件而不是用if或ifnull进行筛选得到目标结果呢?
wwwwb 2010-12-31
  • 打赏
  • 举报
回复
select a.*,IFNULL(b.i,-1) ,IFNULL(c.i,-1)


from a left join b on a.i=b.i
left join c on a.i=b.i

56,940

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧