MYSQL:左连接仅第一行或选择不同

标签 mysql left-join

我正在尝试对多个表进行左连接。但是,它显示了所有左连接表结果。主表将是 '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

最佳答案

使您的 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 ...

关于MYSQL:左连接仅第一行或选择不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26055926/

相关文章:

java - 我应该在创建数据库之前绘制ER图吗

php - 避免空数组的未定义偏移错误

mysql - 从 Excel 导入到 SQL,并有条件检查重复项

sql - INNER JOIN where **every** row must match the WHERE clause?

sql - 如何连接mysql表

mysql - 如何 LEFT JOIN 逗号分隔列表?

sql - 我需要某种条件连接

mysql - 为什么我的 View 是 utf8 以及如何将其更改为 latin1

mysql查询INSERT两张表

mysql - Symfony2 查询在两个表上使用左连接