Mysql命令CASE与子查询

时间:2016-11-09 14:23:38

标签: mysql

我有一个sql命令,我解析为自定义pdo函数。该命令完美无缺。

SELECT table1.* FROM table1
LEFT JOIN table2 ON table2.col1 = table1.col3
WHERE table1.col4 = 'myVal'
AND 2016-10-01 > (
SELECT MAX(loginDate) FROM table4 WHERE table4.id = table1.id
)

我遇到的问题是我的示例2016-10-01中的值依赖于列值。例如,如果table1.col7 ='foo',那么我希望比较值为2016-10-01。如果table1.col7 ='bar',我希望比较值为2016-09-01。如果table1.col7 ='test',我希望比较值为2016-08-01。否则我希望比较值为2016-07-01

关于如何在mysql中实现这种条件的任何想法?

2 个答案:

答案 0 :(得分:0)

您可以使用CASE生成所需的日期值:

SELECT table1.* 
FROM table1
LEFT JOIN table2 ON table2.col1 = table1.col3
WHERE table1.col4 = 'myVal' AND 
      CASE table1.col7 
         WHEN 'foo' THEN '2016-10-01'
         WHEN 'bar' THEN '2016-09-01'
         WHEN 'test' THEN '2016-08-01'
         ELSE '2016-07-01' 
      END
      > 
      (SELECT MAX(loginDate) FROM table4 WHERE table4.id = table1.id)

答案 1 :(得分:0)

将条件更改为以下格式:

AND CASE WHEN table1.col7 = 'foo' THEN '2016-10-01'
         WHEN table1.col7 = 'bar' THEN '2016-09-01'
         .... END > (SELECT... )