mysql - CASE + IF MySQL 查询

标签 mysql case exists

问题如下。我有一个产品可以属于三个类别之一(由category_id 定义)。每个类别表都有与产品表中的category_id相关的category_id字段。所以我有3个案例。我正在检查我的product.category_id 是否在表一中。如果是,我会取一些值。如果没有,我会检查剩下的 table 。我可以在 ELSE 部分写什么?谁能纠正我的问题吗?

CASE
    WHEN IF EXISTS(SELECT * FROM table1 WHERE category_id='category_id') THEN SELECT type_id FROM table1 WHERE category_id='category_id';
    WHEN IF EXISTS(SELECT * FROM table2 WHERE category_id='category_id') THEN SELECT value_id FROM table2 WHERE category_id='category_id';
    WHEN IF EXISTS(SELECT * FROM table3 WHERE category_id='category_id') THEN SELECT group_id FROM table3 WHERE category_id='category_id';
ELSE "dont know what here";
END;

最佳答案

else中,您可以将任何您想要的值作为默认值,例如null

我认为对结果中的每个产品进行三个左连接而不是多个子查询会更有效,并使用 coalesce 来获取第一个现有值。示例:

select coalesce(t1.type_id, t2.value_id, t3.group_id)
from product p
left join table1 t1 on t1.category_id = p.category_id
left join table2 t2 on t2.category_id = p.category_id
left join table3 t3 on t3.category_id = p.category_id

关于mysql - CASE + IF MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3052833/

相关文章:

javascript - Slim PHP 框架使用 mySQL 注册系统

php - 在我的案例中,如何在 mysql 查询中使用 case 语句?

r - 可靠检查R中是否存在变量

mysql - 如果元组在集合中则更新,否则插入 MySQL

php - 从mysql中随机获取php中的记录

mysql - 建模多对多一元关系和 1 :M unary relationship

php - 与PDO php相结合的交易,多个客户端同时进行

MySql 使用 CASE 从另一个表中插入子字符串

Mysql查询问题,列不为空时插入行的情况

javascript - hasClass应该在removeClass之前 - 纯Javascript