在MySQL中,我试图从数据库中检索单行,除非它不存在,在这种情况下我希望它检索第二行。我已经写出了代码,但出于某种原因它会检索这两行。如果未找到第一行,则检索第二行。所以无论它总是检索第二行。
SELECT *
FROM `members`
WHERE
`id` = 49
or `id` = 0
我在不同列的不同数据库上尝试了很多变体(当/ / /等等)时,它总是检索两行。
如何只检索我需要的一行?而且,任何人都可以向我解释为什么会这样做?谢谢。
答案 0 :(得分:2)
您首先想要的是哪一行? id = 49
?
您可以尝试使用mysql的ORDER BY
与LIMIT
相结合来获得所需的结果。例如,如果你想先得到id 49,你可以这样做:
SELECT * FROM members WHERE id = 49 OR id = 0 ORDER BY FIELD(id, 49, 0) LIMIT 1
这将按字段id
排序结果,但将结果限制为仅一行。因此,如果id = 49
没有行,那么它仍会获得列表中的第一行id = 0
答案 1 :(得分:0)
另一种方法是使用union all
和一些逻辑进行验证:
SELECT m.*
FROM members m
WHERE id = 49
UNION ALL
SELECT m.*
FORM members m
WHERE id = 0 AND NOT EXISTS (SELECT 1 FROM member m2 WHERE m2.id = 49);
在某些情况下,这可能会略微加快。
答案 2 :(得分:0)
您可以通过声明订购:
ORDER BY (id = 49) DESC
DESC
因为(id = 49)
对于您想要的行而言是1
。
如果您只想要1,LIMIT 1
。如果您想要更多,可以将它们链接到自定义排序:
ORDER BY (id = 14) DESC, (id = 43) DESC, (id = 49) DESC LIMIT 3
等
很容易记住。