MySQL连接表并在主表的两个不同列中使用连接表中的两个不同记录

时间:2018-02-13 09:32:36

标签: mysql

我正在尝试创建新表格new_data,我将在其中存储来自两个不同表格的广告系列数据 。我有一个表格{ - {1}},其中列campaign_revenue表示数据日期,另一列表示data_date。 在另一个表格中revenue我有列campaign_managerrevenue。所以我想要的是加入这两个表,并将revenue_yesterdayrevenuerevenue_yesterday转移到campaign_revenue。 结果表中的新记录应如下所示:
new_data
 campaign_id | campaign_name | revenue | revenue_yesterday
我们看到的实际上是来自43243242 | testing name | 109.02 | 159.43的两个记录,以及来自campaign_revenue的每个日期和广告系列ID和名称。  我一直在尝试很少的变化,但基于此answer 我的最后一次尝试是这样的:

campaign_manager
它显然没有用,但我希望它能帮助我理解我想要实现的目标...... thx

2 个答案:

答案 0 :(得分:2)

自我加入似乎就是你的想法。您可以两次加入campaign_revenue表,一次是今天的收入,一次是昨天的收入。

SELECT
    cm.campaign_id,
    cm.campaign_name,
    cr1.data_date,
    cr1.revenue AS revenue_today,
    cr2.revenue AS revenue_yesterday
FROM campaign_manager cm
INNER JOIN campaign_revenue cr1
    ON cm.campaign_id = cr1.campaign_id
LEFT JOIN campaign_revenue cr2
    ON cm.campaign_id = cr2.campaign_id AND
       cr1.data_date = DATE_ADD(cr2.data_date, INTERVAL 1 DAY)
-- WHERE cr1.data_date = CURDATE()

此答案假定您的日期是连续的,也就是说,没有错过日期。

答案 1 :(得分:0)

尝试以下查询:

SELECT campaign_id, campaign_name FROM campaign_manager WHERE data_date IN ('2018-02-13',  '2018-01-14',  '2017-02-15') 
UNION 
SELECT title FROM data_table WHERE title IN ('2018-02-13',  '2018-01-14')

您需要使用带有union关键字的两个查询。

供参考:您可以转到“UNION Syntax