mysql - 如何组合多个表?

时间:2015-05-22 14:42:44

标签: mysql sql

我有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  |      |

1 个答案:

答案 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中描述的目标都没有意义。你应该通过一些列之间的关系来链接表,这些关系是一对一,一对多,多对多。