【问题标题】:MYSQL: Left Joining only the first row or select distinctMYSQL:仅左连接第一行或选择不同的
【发布时间】:2014-09-26 09:07:52
【问题描述】:

我正在尝试在几个表上进行左连接。但是,它显示了所有左连接表结果。主表将是“a”,但它显示重复的 id,因为它的 id 在其他表上多次存在。如何只选择其他表格的第一行?或选择表“a”上的不同结果?这是我的 SQL

SELECT a.adsId, a.adsName, a.adsUrl, a.sourceFileName, c.userName, d.preferenceId, e.ppv FROM y5ads_new.ads_source a 
                INNER JOIN y5ads_new.campaign b ON a.campaignId=b.campaignId 
                INNER JOIN y5ads_new.system_member c ON b.createdBy=c.memberId
                INNER JOIN y5ads_new.ads_preference d ON a.adsId=d.adsId
                INNER JOIN y5ads_new.ads_rates e ON a.adsId=e.adsId
                WHERE a.status='2' AND a.deleted='False' AND CURDATE() BETWEEN a.startDate and a.endDate 
                AND b.status='2' AND b.deleted='False' AND CURDATE() BETWEEN b.startDate and b.endDate 
                AND d.deleted='False' AND CURDATE() BETWEEN d.startDate and d.endDate 
                AND e.is_active='1' AND CURDATE() BETWEEN e.startDate and e.endDate 
                ORDER BY a.adsId DESC, d.preferenceId DESC, e.id DESC

【问题讨论】:

  • 如果您愿意,请考虑遵循以下简单的两步操作: 1. 如果您还没有这样做,请提供适当的 DDL(和/或 sqlfiddle),以便我们可以更轻松地复制问题。 2. 如果您尚未这样做,请提供与步骤 1 中提供的信息相对应的所需结果集。

标签: mysql left-join


【解决方案1】:

使您的 ID 与众不同并使用 LEFT JOIN:

SELECT a.adsId, a.adsName, a.adsUrl, a.sourceFileName, c.userName, d.preferenceId, e.ppv 
FROM y5ads_new.ads_source AS a 
LEFT JOIN (SELECT DISTINCT campaignId as campaignId FROM y5ads_new.campaign) AS b 
ON a.campaignId=b.campaignId 
LEFT JOIN (SELECT DISTINCT memberId AS memberId, userName FROM y5ads_new.system_member) AS c 
ON b.createdBy=c.memberId
LEFT JOIN (SELECT DISTINCT adsId AS adsId, preferenceId FROM y5ads_new.ads_preference) AS d 
ON a.adsId=d.adsId
LEFT JOIN (SELECT DISTINCT adsId AS adsId, ppv FROM y5ads_new.ads_rates) AS e 
ON a.adsId=e.adsId
WHERE ...

【讨论】:

  • 天哪,我看不出有什么区别,但它有效...我可以比较前一个吗?或者你能告诉我出了什么问题吗?
  • 顺便说一句,如果我在 select 语句中添加 b.example,我会遇到同样的错误......我猜 b 有问题
  • 没关系,我明白了...如果我想在 select distinct 语句中选择它,只需添加列...谢谢
猜你喜欢
  • 2016-11-13
  • 2015-01-15
  • 2018-03-30
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多