如果条件在SQL中

问题描述 投票:0回答:3

澄清。我想有一个查询,找到我最新的时间戳行,但如果该行已将列删除设置为1,那么我想要返回NULL。这就是我想要做的。

我想在WHERE子句中使用子查询进行查询:

SELECT *
FROM table
WHERE id = (SELECT id FROM table WHERE ts > 'x' ORDER BY ts LIMIT 1)

但问题是表中有一个名为DELETED的列,如果DELETED = 1我想得到这个

SELECT *
FROM table 
WHERE id = NULL

我怎么能这样做?

我正在使用MariaDB,但任何SQL都会有所帮助。

sql mariadb
3个回答
1
投票

我知道你想要“删除”的结果,如果有的话。否则你想要ts大于x的行。假设“如果不是1,则DELETED为0,您可以像这样使用Gordons SQL:

SELECT t.*
FROM table t
WHERE (t.ts > 'x' or t.deleted = 1)
ORDER BY t.deleted desc, t.ts
LIMIT 1;

0
投票

检查一下:

SELECT *
FROM table
WHERE id = (SELECT id FROM table WHERE ts > 'x' ORDER BY ts LIMIT 1)
AND deleted = 0;

0
投票

我不认为这与您的问题有关,但为什么不执行查询:

SELECT t.*
FROM table t
WHERE t.ts > 'x'
ORDER BY t.ts
LIMIT 1;

它似乎比你的查询版本更简单 - 假设id在表中是唯一的。

© www.soinside.com 2019 - 2024. All rights reserved.