A表:
CREATE TABLE `a` (
`aid` int(11) NOT NULL,
`astate` int(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `a` (`aid`, `astate`) VALUES
(1, 1),
(2, 1),
(3, 1);
B表:
CREATE TABLE `b` (
`bid` int(11) NOT NULL,
`bfield` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `b` (`bid`, `bfield`) VALUES
(1, 'f1 '),
(2, 'f2 '),
(3, 'f3 '),
(4, 'f4 ');
C表:
CREATE TABLE `c` (
`cid` int(11) NOT NULL,
`aid` int(11) NOT NULL,
`bid` int(11) NOT NULL,
`cvalue` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `c` (`cid`, `aid`, `bid`, `cvalue`) VALUES
(1, 1, 1, 'v11 '),
(2, 1, 2, 'v12 '),
(3, 1, 3, 'v13 '),
(4, 2, 1, 'v21 '),
(5, 2, 2, 'v22 '),
(6, 3, 1, 'v31 ');
我现在的mysql语句:
SELECT a.aid, b.bid, b.bfield, cvalue
FROM a
LEFT JOIN (b, c)
ON (a.aid = c.aid AND b.bid = c.bid)
ORDER BY a.aid ASC, b.bid ASC
得到的结果是:
aid bid bfield cvalue
1 1 f1 v11
1 2 f2 v12
1 3 f3 v13
2 1 f1 v21
2 2 f2 v22
3 1 f1 v31
然后希望得出来的数据结构是:
aid bid bfield cvalue
1 1 f1 v11
1 2 f2 v12
1 3 f3 v13
1 4 f4 null
2 1 f1 v21
2 2 f2 v22
2 3 f3 null
2 4 f4 null
3 1 f1 v31
3 2 f2 null
3 3 f3 null
3 4 f4 null
在csdn开三贴,最后总算得到想要的答案!
WWWWA的回答:
SELECT aa.aid,aa.bid,aa.bfield,c.cvalue FROM (
SELECT * FROM a,b
ORDER BY a.aid,bid) aa
LEFT JOIN c ON aa.bid=c.bid AND aa.aid=c.aid
ACMAIN_CHM的回答:
mysql> select a.aid,b.bid,b.bfield,c.cvalue
-> from (a , b) left join c on a.aid=c.aid and b.bid=c.bid
-> order by 1,2;
+-----+-----+--------+--------+
| aid | bid | bfield | cvalue |
+-----+-----+--------+--------+
| 1 | 1 | f1 | v11 |
| 1 | 2 | f2 | v12 |
| 1 | 3 | f3 | v13 |
| 1 | 4 | f4 | NULL |
| 2 | 1 | f1 | v21 |
| 2 | 2 | f2 | v22 |
| 2 | 3 | f3 | NULL |
| 2 | 4 | f4 | NULL |
| 3 | 1 | f1 | v31 |
| 3 | 2 | f2 | NULL |
| 3 | 3 | f3 | NULL |
| 3 | 4 | f4 | NULL |
+-----+-----+--------+--------+
12 rows in set (0.01 sec)
mysql>