我有一个这样的查询:
SELECT (CASE WHEN subject = '' THEN $subject ELSE subject END ) main_subject,
(CASE WHEN subject = '' THEN $id ELSE id END ) main_id,
(CASE WHEN subject = '' THEN $related ELSE related END ) main_related
FROM qanda
WHERE tag = :tag;
如您所见,所有条件下的条件都是相同的..所以我想知道,我可以改进吗?我的意思是我可以为所有情况只编写一次 CASE
吗?
最佳答案
你的代码没问题。如果你真的愿意,你可以这样做:
SELECT $subject as main_subject, $id as main_id, $related as main_related
FROM qanda
WHERE tag = :tag AND subject = ''
UNION ALL
SELECT subject as main_subject, id as main_id, related as main_related
FROM qanda
WHERE tag = :tag AND (subject <> '' or subject IS NULL)
这消除了 CASE
语句,但我认为这并不是真正的简化。但是,它确实减少了需要复制条件的次数,如果您有很多列,这可以是一种简化。
关于php - 当条件相同时,如何对多列使用一次 CASE 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38943589/