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
用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进行筛选得到目标结果呢?
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
用LEFT JOIN 是比较保险的,你用的是内连接
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>
from a left join b on a.i=b.i
left join c on a.i=b.i
用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进行筛选得到目标结果呢?
From A Left Join B on A.i=B.i
Left JOin C on A.i=C.i
-> 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>