2016-12-18 31 views
0

我想写将运行查询,如果当前日期是例如查询=“2016年12月18日”,如果没有,运行查询B.如果语句来执行不同的查询

查询A实施例:

SELECT 
    issueDate Date_Time, 
    firstName, player_id Player_ID 

FROM 
PlayerNote pn join Brand b 

WHERE 
    pn.issueDate >= date_format(date_sub(curdate(),interval 1 month), 
    '%Y-%m-01') and pn.issueDate < date_format(curdate() ,'%Y-%m-01') 

查询乙例如:

SELECT 
     issueDate Date_Time, 
     firstName, player_id Player_ID 

    FROM 
    PlayerNote pn join Brand b 

    WHERE 
     pn.issueDate >= date_format(curdate() ,'%Y-%m-01') 
     and pn.issueDate <curdate() 

我试图写在case语句这两个查询:当(CURDATE()= '2016年12月18日' 选择的情况下)然后(查询A)ELSE (查询B)端

但接收 错误代码:1241操作数应包含1列(多个)

任何建议?

+0

您是否知道笛卡尔产品? –

回答

0

简单。布尔代数。

SELECT 
    issueDate Date_Time, 
    firstName, player_id Player_ID 

FROM 
PlayerNote pn join Brand b 

WHERE 
    (curdate()='2016-12-18' 
    and pn.issueDate >= date_format(date_sub(curdate(),interval 1 month), '%Y-%m-01') 
    and pn.issueDate < date_format(curdate() ,'%Y-%m-01')) 
    or 
    (curdate()<>'2016-12-18' 
    and pn.issueDate >= date_format(curdate() ,'%Y-%m-01') 
    and pn.issueDate <curdate()); 
+0

非常感谢,没有想到这个选项 –

0

我不认为你可以在MySQL中使用“select case when”。它可能在Oracle中工作(如果我没有记错的话,不确定)。据我了解,它

例如,你可以这样做

SELECT CASE 1 WHEN 1 THEN 'one' 
WHEN 2 THEN 'two' ELSE 'more' END; 

或本

SELECT CASE 1 WHEN 1 THEN (select 1) 
WHEN 2 THEN (select 1) ELSE (select 1) END; 

,但不是这个(返回多行只接受单一值(一行和一列) )

SELECT CASE 1 WHEN 1 THEN (select 1 from anytable) 
WHEN 2 THEN (select 1 from anytable) ELSE (select 1 from anytable) END; 

也不此(返回多个列)

SELECT CASE 1 WHEN 1 THEN (select 1,2) 
WHEN 2 THEN (select 1,2) ELSE (select 1,2) END; 

我建议你在每个子查询中使用union和put data condition。 例如

SELECT 
    issueDate Date_Time, 
    firstName, player_id Player_ID 

FROM 
PlayerNote pn join Brand b 

WHERE 
    pn.issueDate >= date_format(date_sub(curdate(),interval 1 month), '%Y-%m-01') 
    and pn.issueDate < date_format(curdate() ,'%Y-%m-01') 
    and curdate()='2016-12-18' 

UNION 

SELECT 
     issueDate Date_Time, 
     firstName, player_id Player_ID 

    FROM 
    PlayerNote pn join Brand b 

    WHERE 
     pn.issueDate >= date_format(curdate() ,'%Y-%m-01') 
     and pn.issueDate <curdate() 
     and curdate()<>'2016-12-18' 

我没有测试它,但它应该工作。