【发布时间】:2015-03-08 06:57:33
【问题描述】:
我有这张表 id_name:
+----+------+
| id | name |
+----+------+
| 1 | one |
| 2 | two |
| 3 | three|
...等,以及另一个表ID
+----+-----+-----+-----+----
| id | aid | bid | cid | ...
+----+-----+-----+-----+----
| 1 | 1 | 2 | 3 | ...
| 2 | 2 | null| null| ...
| 3 | 2 | 3 | null| ...
我想选择这样的东西:
+----+-----+-----+-----+-----+-----+-----+----
| id | aid |aname| bid |bname| cid |cname| ...
+----+-----+-----+-----+-----+-----+-----+----
| 1 | 1 | one | 2 | two | 3 |three| ...
| 2 | 2 | two | null| null| null| null| ...
| 3 | 2 | two | 3 |three| null| null| ...
基本上,如果id不为null,则取name到对应的列,否则保持name为null。
在我的项目中,我有 7 列 (a-g)。
我尝试了 7 级连接,基本上是这样的:
SELECT id,a.id AS aid,a.name AS aname,b.id AS bid,b.name AS bname, ...
FROM ids AS t
JOIN id_name AS a ON a.id=t.aid
JOIN id_name AS b ON b.id=t.bid
...
等等。但后来我注意到,如果 t.b 为空,那么 b.id=null 始终为假,所以我不会选择任何行。 我该怎么做 IF b.id IS NULL THEN JOIN id_name AS b ON b.id=t.bid ELSE "keep bname null"?
我知道我可以创建一个临时表并进行 7 次更新。但是有没有办法使用单个 SELECT 来完成此操作?
谢谢!
【问题讨论】:
标签: mysql join conditional-statements