【问题标题】:MySQL LIMIT results with INNER JOIN with more than 2 tables具有超过 2 个表的 INNER JOIN 的 MySQL LIMIT 结果
【发布时间】:2014-11-04 11:55:28
【问题描述】:

我有一个数据库,允许用户拥有多个电子邮件地址。我想查询数据库以获取该客户的所有工作实例。每个作业返回两次,每封电子邮件返回一次。

这是我的查询:

SELECT customers.first_name, customers.last_name, emails.email, services.title, services.description, jobs.status, jobs.job_id 
FROM customers 

INNER JOIN emails ON customers.user_id=emails.user_id 
INNER JOIN jobs ON customers.user_id=jobs.customer_id 
INNER JOIN services ON jobs.service_id=services.service_id;

它返回的是这样的:

我只想用第一封电子邮件返回结果。对于用户存档的每个电子邮件地址,该行不应重复。

如何做到这一点?

【问题讨论】:

  • 提供你的表定义和一些样本数据集进行测试
  • 最好的方法是什么?
  • 看看@sql fiddle把你的表架构和样本数据集放在这里

标签: php mysql sql database inner-join


【解决方案1】:

您可以在 SQL 上使用GROUP BY 来获取唯一的列值,如下所示。

SELECT customers.first_name, customers.last_name, emails.email, services.title, services.description, jobs.status 
FROM customers 

INNER JOIN emails ON customers.user_id=emails.user_id 
INNER JOIN jobs ON customers.user_id=jobs.customer_id 
INNER JOIN services ON jobs.service_id=services.service_id;

GROUP BY jobs.job_id;

【讨论】:

  • 这会返回同一个工作的两个电子邮件地址,我想要两个工作的相同电子邮件地址。
  • 然后试试jobs.status里面的group by。我也编辑了答案。
  • 如果我有多个具有相同状态的工作,那么我不会返回正确的结果。
  • 最好在 select 中包含作业名称或作业 ID,并将该列名称放在 group by 中。
  • 好主意,job_id 是独一无二的,所以应该可以工作。如果我想列出另一个(本例中为第二个)电子邮件地址,我该怎么做?
猜你喜欢
  • 1970-01-01
  • 2019-04-09
  • 2021-03-08
  • 2014-10-25
  • 1970-01-01
  • 2015-04-28
  • 2015-09-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多