【问题标题】:MySQL Inner Join, selecting from multiple tablesMySQL内连接,从多个表中选择
【发布时间】:2014-02-11 12:13:52
【问题描述】:

我真的很难理解这一点。我正在尝试从多个表运行 SELECT 查询。

这是我迄今为止所没有的;

SELECT jira_issues.*, session_set.* FROM jira_issues, session_set
INNER JOIN reports on jira_issues.report_id = reports.id 
    WHERE jira_issues.report_id = 648

我有其他表(session_set、report_device)分别有一个 ReportID 和 report_id 列。

我有一个具有主键id 的报告表。在其他表中,report.id 键与外键链接。

最终我想要实现的是: 我在报告表中有一个 ID 为 648 的条目。在其他表(jira_issues、report_device、session_set)中,我也有一个条目,其外键链接到报告表中的报告 ID。

我想运行一个 SELECT Query 来查询表(jira_issues、report_device 和 session_set)并根据 report.id 从中获取所有数据。

谢谢!

【问题讨论】:

  • 作为最佳实践:使用一种连接类型 - ANSI 样式(即JOIN foo ON .. 您同时使用 ANSI 样式和 theta 样式(即 FROM 子句中的逗号分隔表) )。

标签: php mysql inner-join


【解决方案1】:

这个呢:

SELECT * FROM jira_issues ji
    LEFT JOIN session_set ss ON ji.report_id = ss.ReportID
    LEFT JOIN report_device rd ON rd.report_id = ji.report_id
WHERE ji.report_id = 648;

【讨论】:

  • 啊,太棒了!如果我想限制每个表的列怎么办?例如,我只需要 jira_issues 表中的 issue_id 和 issue_key 以及 report_device 表中的 device_name。谢谢!
  • 只需在 SELECT 中指定列名,而不是使用 SELECT *。例如 SELECT ji.issue_id, ji.issue_key .
  • 谢谢,还有一件事!如果我也想从报告表中选择数据怎么办?
  • 你可以很容易地在另一个表上 LEFT JOIN
  • 而不是SELECT *,只需使用SELECT ji.field1, rd.field2 从表jira_issues 中选择field1 并从表field2 中选择field2
【解决方案2】:

只需对 from 子句中的逗号说“不”。始终使用显式 join 语法:

SELECT ji.*, session_set.*
FROM jira_issues ji inner join
     reports r
     on ji.report_id = r.id  inner join
     session_set ss
     on ss.ReportId = r.report_id
WHERE ji.report_id = 648;

如果某些表可能没有对应的行,您可能需要left outer join 而不是inner join

【讨论】:

    【解决方案3】:

    请尝试一下。您可能会遇到语法错误。

    SELECT a., b. FROM jira_issues a, session_set b, 报告 c 其中 a.report_id = c.id 和 b.report_id = c.id AND a.report_id = 648

    【讨论】:

      猜你喜欢
      • 2015-07-17
      • 2020-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多