php - 当条件相同时,如何对多列使用一次 CASE 语句?

标签 php mysql sql case

我有一个这样的查询:

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/

相关文章:

sql - mysql:如何将列更改为 PK Auto_Increment

mysql - 连接2个表时如何按2列排序?

php - 在下拉式表单上显示表单错误

Php 选择 * 喜欢的地方

javascript - PHP弹出sql查询结果

php - 选择带有数组的 MySQL 条目

MySQL进程占用CPU,这个进程是做什么的?

php - Laravel 寻找错误的表

MySQL:从 double 转换为十进制时精度损失

java - ResultSet 不为 null,但 resultset.next() 返回 false