问题如下。我有一个产品可以属于三个类别之一(由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/