Mysql命令CASE与子查询比较

标签 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 中实现这种条件的任何想法?

最佳答案

您可以使用 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)

关于Mysql命令CASE与子查询比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40509237/

相关文章:

sql - 如何为每个外键选择有限数量的行?

mysql - SQL:KEY id_2 有什么作用?

php - 给出警告 : mysql_real_escape_string() expects parameter 2 to be resource, 为空

mysql - 连接表结果 Google BigQuery

c++ - MySQL C++ 未实现异常

php - 如何在mysql中以内爆形式插入数组值

mysql - Powershell InvalidOperation错误

mysql - 将聊天消息存储在数据库中的最佳方法?

php - MySQL查询使用另一个页面的查询结果 - php

PHP PDO 将远程主机更改为本地主机名