0

我在上一个线程中询问了有关多行的问题,但现在我需要了解单行。这是一个示例查询:

SELECT * FROM table1 WHERE this = 5 LIMIT 1

但是如果没有找到行,那么我会找到具有不同值的记录:

SELECT * FROM table1 WHERE this = 1 LIMIT 1

所以我想要的是,找到一个值为 5 的行,如果没有找到,则默认找到一个值为 1 的行。我如何在单个查询中做到这一点?OR 语句会这样工作吗?

SELECT * FROM table1 WHERE this = 5 OR this = 1 LIMIT 1

OR 语句的顺序是否会尝试查找任何值为 5 的行,如果找到,它将停止并返回该行?IF not found 然后查找 1 然后返回该行?如果没有,那么我如何使用单个查询来执行此操作,它会搜索一个值,如果未找到则默认查找另一个值?

我在想这个查询:

SELECT * FROM table1 WHERE this IN(5,1) ORDER BY this ASC LIMIT 1

但是,如果找到两个值,此查询将始终返回值为 1 对吗?所以我尝试了这个:

SELECT * FROM table1 WHERE this IN(5,1) ORDER BY this DESC LIMIT 1

但是,如果发现两行都正确,这将始终返回 5 的值?

4

2 回答 2

1

您的问题似乎优先搜索 5,并且只有在未找到时才搜索 1。因此,您的第二个解决方案符合要求。无论是否仅找到 5 或 5 和 1 都存在,它将返回 5 的值。

第二个选项

SELECT * FROM table1 WHERE this IN(5,1) ORDER BY this DESC LIMIT 1
于 2012-05-20T11:26:17.027 回答
0

试试这个

SELECT * 
FROM table1 tab 
WHERE tab.this = IF((SELECT COUNT(*) 
                     FROM table1 
                     WHERE this = 5) > 0, 5, 1) 

IF 内的查询正在检查计数。

我不确定性能,但我认为这可以解决您的问题。

于 2012-05-20T11:24:41.940 回答