我需要MySQL子查询吗?我怎样才能得到这些结果?

时间:2017-08-03 19:18:17

标签: mysql

首先,表名和布局:

table names & layouts

以下是我想要的结果:

Desired Results

这是'得到你' (技巧)我猜..

我只会传递一个(动态)imis_id / user_id(当前在一个表上不匹配的列名)...

因此,需要在关系表上进行查找(select),传递给(动态)id ..并且current_org = 1。

这将获得/给我目标org_id,我需要在其中获取所有用户信息(与org_id相关联)..以及所有组织细节。

这是一个弱/失败的尝试:(它使用硬编码的org_id)无效..我只需要传入user_id / imis_id ..并且current_org = 1来获取目标org_id。

SELECT genealogy_orgs.org_id, genealogy_orgs.org_name, 
genealogy_relations.user_id, genealogy_relations.relation_type, genealogy_relations.start_year, genealogy_relations.end_year, 
genealogy_users.imis_id, genealogy_users.full_name 
FROM genealogy_orgs 
INNER JOIN genealogy_relations ON genealogy_orgs.org_id = genealogy_relations.org_id 
INNER JOIN genealogy_users ON genealogy_relations.user_id = genealogy_users.imis_id 
WHERE genealogy_orgs.org_id = '84864';

这是另一次失败的尝试(只返回1行)..但使用正确的标准:

SELECT 
genealogy_relations.org_id, 
genealogy_relations.user_id, genealogy_relations.relation_type, genealogy_relations.start_year, genealogy_relations.end_year, 
genealogy_users.imis_id, genealogy_users.full_name,
genealogy_orgs.org_name
FROM genealogy_relations
INNER JOIN genealogy_orgs ON genealogy_relations.org_id  = genealogy_orgs.org_id
INNER JOIN genealogy_users ON genealogy_relations.user_id = genealogy_users.imis_id 
WHERE genealogy_relations.user_id = '00003' AND genealogy_relations.current_org = '1';

此时,我甚至不确定我需要搜索什么?这是一个'子查询/子选择'发挥作用?

我的MySQL-fu仅限于非常直接/简单的查询类型。这比以往任何时候都要先进。

2 个答案:

答案 0 :(得分:1)

您需要在genealogy_relations上加入org_id表:

SELECT o.*, u.*
FROM genealogy_relations r1
JOIN genealogy_relations r2 ON r2.org_id = r1.org_id
JOIN genealogy_orgs o       ON o.org_id  = r2.org_id
JOIN genealogy_users u      ON u.imis_id = r2.user_id
WHERE r1.user_id = '00003'
  AND r1.current_org = '1'

答案 1 :(得分:0)

从查询中删除genealogy_relations.user_id = '00003',它应该可以正常工作

SELECT 
genealogy_relations.org_id, 
genealogy_relations.user_id, genealogy_relations.relation_type, genealogy_relations.start_year, genealogy_relations.end_year, 
genealogy_users.imis_id, genealogy_users.full_name,
genealogy_orgs.org_name
FROM genealogy_relations
INNER JOIN genealogy_orgs ON genealogy_relations.org_id  = genealogy_orgs.org_id
INNER JOIN genealogy_users ON genealogy_relations.user_id = genealogy_users.imis_id 
WHERE genealogy_relations.current_org = '1';