【问题标题】:Do I need a MySQL sub query? How can I get these results?我需要一个 MySQL 子查询吗?我怎样才能得到这些结果?
【发布时间】:2018-01-11 13:36:30
【问题描述】:

首先,表格名称和布局:

这是我想要的结果:

我猜这就是“知道了”(技巧)..

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

因此,需要在关系表上对传入的(动态)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 仅限于非常直接/plain-jane 查询类型。这比我习惯的要先进。

【问题讨论】:

  • 将表格和数据发布为我们无法从图片中复制/粘贴的文本READ THIS
  • 向我们展示数据库架构、示例数据和预期输出。请阅读How-to-Ask 这里是START 了解如何提高问题质量并获得更好答案的好地方。 How to create a Minimal, Complete, and Verifiable example 尝试在rextester.com 中创建样本
  • 你的“动态ID”是什么意思?因为您的结果为 3 个不同的 id 返回 3 行
  • @Jaun Carlos Oropeza 1.) 我的意思是 '00003' 将是一个变量.. 它在示例中是硬编码的。 2.) 我不明白如何使用该 rextester.com 链接
  • 那么你需要清楚你的参数中的什么值会产生那个“欲望”的结果,否则只是一个猜测。现在您的查询似乎没问题,您将值设置为“00003”并得到一个结果,因为您只有一行

标签: mysql


【解决方案1】:

您需要在org_id 上加入genealogy_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'

【讨论】:

  • 谢谢...查询没有编译/工作..我收到一个错误:“查询中的'on子句'中的未知列'o.user_id':”
  • 这就是为什么您应该在 rextester 中发布一个工作示例以便我们对其进行测试。
  • @whispers 应该是o.org_id。现已修复
  • @Paul Spiegel - 砰!你说对了! (已接受答案).. 抱歉,我让图像变得更加困难..(不了解如何传递表格布局/数据内容)自行加入? (对我来说是新的!)感谢您的分享,并给了我一些新的东西来阅读。
  • @whispers 是的,如果你给它们提供不同的别名,例如 r1r2,你可以加入一个表。
【解决方案2】:

从查询中删除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';

【讨论】:

  • 如果我这样做.. 它会提取所有 current_org = '1' 数据.. 使用上面的(坏)图像示例.. 用户:00003 在知道此 ID 后,查看 org_id 是什么在与 current_org = '1' 相同的 ROW 中。这给了我一个目标 org_id:'84864 所以我只需要获取与“84864”匹配的数据组织......就像我需要得到那个“目标 org_id”首先..然后对我的其他数据进行正常的 JOIN 查询
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
相关资源
最近更新 更多