在左侧的行中选择一对多关系

时间:2016-10-19 10:18:16

标签: mysql sql

我有桌子

+--------+-------+
| obs_id | name  |
+--------+-------|
| 101    | mics  |
| 102    | jan   |
+--------+-------+

我有表监控

+--------+--------+---------+
| mon_id | obs_id | code_id |
+--------+--------+---------+
|   1    |  101   | 201     |
|   2    |  101   | 201     |
|   3    |  101   | 202     |
|   4    |  102   | 201     |
|   5    |  102   | 202     |
+--------+--------+---------+

我有表格代码

+--------+-----------+
|code_id | code_name |
+--------+-----------|
| 201    |  node     |
| 202    |  java     |
| 203    |  c++      |
+--------+-----------+

查询结果

+--------+--------+---------+-----------+
| obs_id | name   | code_id | code_name |
+--------+--------+---------+-----------+
|   101  |  mics  |  201    | node      |
|   102  |  jan   |  201    | node      |
+--------+--------+---------+-----------+

有人可以给我一个正确的mysql查询来提出我的结果。

select A.obs_id, A.name, M.code_id, C.code_name from obs as A  
left join monitoring as M on M.obs_id = A.obs_id
left join code as C on C.code_id = M.code_id

我的查询返回超过2,或者不是我想要的结果。

1 个答案:

答案 0 :(得分:0)

根据您的结果,它看起来只是想要“节点”的结果。 然后查询将如下所示:

CREATE PROCEDURE GETDATA

AS

@CodeId int=0

BEGIN

select DISTINCT A.obs_id, A.name, M.code_id, C.code_name from obs as A  

left join monitoring as M on M.obs_id = A.obs_id

left join code as C on C.code_id = M.code_id WHERE c.code_id=@CodeId

END

现在,您只需将codeID传递给存储过程,它将返回基于CodeID的输出。它看起来很动态。

上述查询将根据您的需要提供结果。

如果您想获取所有代码的不同数据,请删除where条件。

谢谢。