2017-08-03 79 views
1

首先,表名和布局:我需要MySQL子查询吗?我怎样才能得到这些结果?

table names & layouts

这里是我想要的结果:

Desired Results

这里是 '得了雅'(伎俩)我想..

我只会通过一个(动态)imis_id/user_id(col名称目前不匹配一个表)...

所以查找(选择)将需要在关系表做了,在(动态)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仅限于非常直接/纯粹的查询类型。这要比我以前更先进了。

+1

邮政表和数据为文本我们不能复制/从图片粘贴[阅读此](http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-question/ 285557#285557) –

+2

向我们展示db架构,示例数据和预期输出。 \t请阅读[**如何提问**](http://stackoverflow.com/help/how-to-ask) \t \t这里是一个伟大的地方[** START **] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)来了解如何提高您的问题质量并获得更好的答案。 \t [**如何创建一个最小的,完整的,并且可验证例如**](http://stackoverflow.com/help/mcve) \t尝试创建http://rextester.com –

+0

一个什么样你的意思是“动态ID”?因为你的结果返回3行为3个不同的ID –

回答

1

你需要用自己的加盟对org_idgenealogy_relations表:

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' 
+0

谢谢...查询doesnt编译/工作.. 我得到一个错误:”未知的列'o.user_id''on子句'中查询:“ – whispers

+1

这就是为什么你应该发布工作前足够rextester所以我们可以测试它。 –

+0

@whispers它应该是'o.org_id'。现在修复 –

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'; 
+0

如果我做..它拉ALL current_org =“1”的数据.. 使用从上面的(差)图像的例子.. 用户:00003 知道此ID,并在看什么org_id之后是在与current_org ='1'相同的行..这给了我一个目标org_id:'84864 因此,我只需要获得数据orgs匹配“84864”... 它就像我需要得到'目标org_id“first ..然后只是做一个正常的JOIN查询我的其他数据 – whispers

相关问题