Mysql 选择左侧具有一对多关系的行

Mysql 选择左侧具有一对多关系的行,mysql,sql,Mysql,Sql,我有桌子 +--------+-------+ | obs_id | name | +--------+-------| | 101 | mics | | 102 | jan | +--------+-------+ 我有桌子监控 +--------+--------+---------+ | mon_id | obs_id | code_id | +--------+--------+---------+ | 1 | 101 | 201 | |

我有桌子

+--------+-------+
| 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,或者结果不是我想要的

根据您的结果,您似乎只想查看“节点”的结果。 然后查询将如下所示:

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条件


谢谢。

根据您的结果,您似乎只想查看“节点”的结果。 然后查询将如下所示:

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条件


谢谢。

为什么忽略java代码?请注意,在这种情况下,mon_id是多余的。您在(obs_id,code_id)上有一个完全可用的自然键,这意味着代理是不必要的。为什么要忽略java代码?请注意,在这种情况下,mon_id是多余的。你有一个完全可用的自然钥匙(obs_id,code_id),这意味着不需要代理。不,先生。它将不仅返回代码\名称节点。它是动态的,它保护代码id的用途。嗨,Mics,你可以使用存储过程进行动态行为。请检查我的答案。我在另一个查询中没有使用存储过程。没有,先生。它将不仅返回代码\名称节点。它是动态的,它保护代码id的用途。您好,您可以使用存储过程进行动态行为。请检查我的答案。我在其他查询中没有使用存储过程。