我想我在这方面的努力超出了我应有的程度。 我有这个简单的查询:
SELECT * FROM opening_hours WHERE day_id = 3 OR day_id IS NULL
这将给我所有在 day_id 列中同时具有 3 和 NULL 的行,如果找不到 3,它将仅提供具有 NULL 的行。 如果找到 3,我如何排除具有 NULL 的行,如果找不到 3,我如何将具有 NULL 的行给我?
有没有一种方法可以在一个查询中执行此操作?我也尝试过 XOR,它将只给出找到 3 的行,但如果没有,则没有。
最佳答案
一种可能的方式:
SELECT * FROM opening_hours WHERE CASE
WHEN EXISTS(SELECT * FROM opening_hours WHERE day_id = 3) THEN day_id = 3
ELSE day_id IS NULL
END
另一种可能的方式:
SELECT * FROM opening_hours WHERE day_id <=> (
SELECT day_id
FROM opening_hours
WHERE day_id = 3 OR day_id IS NULL
ORDER BY day_id DESC
LIMIT 1
)
或者,使用连接:
SELECT * FROM opening_hours NATURAL JOIN (
SELECT MAX(day_id) AS day_id
FROM opening_hours
WHERE day_id = 3 OR day_id IS NULL
) t
关于MYSQL:如何在 'IS NULL' 子句中回退到 'WHERE',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20586732/