从mysql中的显式表中选择

时间:2015-02-05 18:33:59

标签: mysql sql

我正在尝试连接数据库中不存在的数据,并且永远不会更改。

我想这样做:

SELECT val, campaign FROM values
LEFT JOIN (SELECT campaign, start, end FROM (
    ('Spring 2104', '2014-05-01', '2014-08-01'),
    ('Winter 2014', '2014-08-01', '2014-12-31')
) as campaign_table ON (
    values.date > campaign_table.start AND
    values.date < campaign_table.end
)

这可能吗?我可以创建一个临时表,但是对于我想要做的事情,这实际上并不起作用。

2 个答案:

答案 0 :(得分:0)

也许您需要立即执行所有查询:

CREATE TABLE IF NOT EXISTS `tempo`( `campaign_name` VARCHAR(100), `from` DATE, `to` DATE ); 
INSERT INTO tempo(campaign_name, `start`, `end`) VALUES ('Spring 2104', '2014-05-01', '2014-08-01'),('Winter 2014', '2014-08-01', '2014-12-31');
SELECT t1.val, t1.campaign, t2.campaign_name FROM `values` t1, `tempo` t2 WHERE t1.date BETWEEN t2.start AND t2.end;
DROP TABLE `tempo`;

您还可以制作:CREATE TEMPORARY TABLE

尝试!

答案 1 :(得分:0)

您可以使用union all创建虚拟集。考虑到您的虚拟数据集中只有少数几行,这是一个可行的解决方案。

SELECT val
    ,campaign
FROM
VALUES
LEFT JOIN (
    SELECT 'Spring 2104' campaign
        ,'2014-05-01' start
        ,'2014-08-01' [end]

    UNION ALL

    SELECT 'Winter 2014'
        ,'2014-08-01'
        ,'2014-12-31'
    ) AS campaign_table ON
VALUES.DATE > campaign_table.start
    AND
VALUES.DATE < campaign_table.[end]
相关问题