我有tbl_room:
| room_no | room_type |
---------- -----------
| 101 | Lab |
| 102 | General |
tbl_teacher:
| t_id | t_lname |
---------- ----------
| 001 | Asd |
| 002 | Qwe |
| 003 | Ghu |
tbl_subject
| code | desc |
---------- ----------
| M101 | Fund |
我想要的是在一个查询中组合这些表中的列。
它应该是这样的:
| room_no | t_id | code |
---------- ------ -------
| 101 | 001 | M101 |
| 102 | 002 | |
| | 003 | |
答案 0 :(得分:0)
您最好在所有3个表中设置room_no
列,然后加入:
SELECT t1.room_no, t2.t_id, t3.`code`
FROM tbl_room t1
LEFT JOIN FROM tbl_teacher t2
ON t1.room_no = t2.room_no
LEFT JOIN FROM tbl_subject t3
ON t1.room_no = t3.room_no
但这里只是为了好玩,这是一个查询,它为您提供了所提供数据样本的预期结果:
http://sqlfiddle.com/#!2/03890a/6
SELECT t1.room_no, t2.t_id, t3.`code`
FROM (
SELECT *, @idx1:=IFNULL(@idx1,0)+1 as idx
FROM tbl_room
) t1
RIGHT JOIN (
SELECT *, @idx2:=IFNULL(@idx2,0)+1 as idx
FROM tbl_teacher
) t2
ON t1.idx = t2.idx
LEFT JOIN (
SELECT *, @idx3:=IFNULL(@idx3,0)+1 as idx
FROM tbl_subject
) t3
ON t3.idx = t2.idx
但只有当我们知道tbl_teacher
在所有3个表之间保存最大记录并且我为RIGHT JOIN
设置tbl_teacher
时,它才有效。但是这个查询和你在OP中描述的目标都没有意义。你应该通过一些列之间的关系来链接表,这些关系是一对一,一对多,多对多。