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

MySQL联接表,并在主表的两个不同列中使用联接表中的两个不同记录,mysql,Mysql,我正在尝试创建一个新表-new\u data,其中我将存储来自两个不同表的活动数据 . 我有一个表-campaign\u revenue,表中有一列data\u date表示……数据日期,另一列是revenue。 在另一个表中-campaign\u manager我有revenue和revenue\u treaty两列。因此,我想将这两个表连接起来,并将收入和昨天的收入从活动收入导入新数据。 结果表中的新记录应如下所示: 活动标识|活动名称|收入|收入|昨天 43243242 |测试名称| 1

我正在尝试创建一个新表-
new\u data
,其中我将存储来自两个不同表的活动数据 . 我有一个表-
campaign\u revenue
,表中有一列
data\u date
表示……数据日期,另一列是
revenue
。 在另一个表中-
campaign\u manager
我有
revenue
revenue\u treaty
两列。因此,我想将这两个表连接起来,并将
收入
昨天的收入
活动收入
导入
新数据
。 结果表中的新记录应如下所示:
活动标识|活动名称|收入|收入|昨天

43243242 |测试名称| 109.02 | 159.43

其中我们看到的实际上是来自
活动收入的两条记录,以及来自
活动经理的每个日期、活动id和名称的两条记录。
我尝试了很多变化,但基于此
我最后一次尝试是:

SELECT campaign_id, campaign_name
FROM campaign_manager
UNION
SELECT
    revenue
FROM campaign_revenue
WHERE data_date = '2018-02-13'
UNION
SELECT
    revenue AS revenue_yesterday
FROM campaign_revenue
WHERE data_date = '2018-02-12'

它显然不起作用,但我希望它有助于理解我试图实现的目标…thx

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

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()

这个答案假设您的日期是连续的,也就是说,没有丢失的日期。

自连接似乎就是您想要的。您可以两次加入
活动收入
表,一次加入今天的收入,一次加入昨天的收入

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()
此答案假设您的日期是连续的,即没有丢失的日期。

尝试以下查询:

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关键字的查询

供参考:您可以转到“”

尝试以下查询:

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关键字的查询


参考:您可以转到“”

您忘记在第一个join子句中选择今天的日期:
和cr1。data_date='2018-02-13
@mice我不清楚OP想要的是今天,还是多个日期。事实上。但是,最好将数据日期添加到
选择
子句中,以避免答案中有几行无法区分的日期。您忘记了在第一个连接子句中选择今天的日期:
和cr1.data\u date='2018-02-13
@mice我不清楚OP是否需要今天,或者多次约会。但是,最好将数据日期添加到
SELECT
子句中,以避免答案中有几行不可区分的日期。