MySQL中如何合并内连接查询结果与SELECT查询结果?
问题原因
你的查询报错是因为UNION要求前后两个查询返回的列数完全一致,且对应列的数据类型匹配。第一个查询是TaskCategory和TaskCategoryMeta内联,返回两张表的所有字段(共7列),第二个查询只返回TaskCategory的4个字段,列数不匹配,导致执行中断。
解决方案
根据你的需求,分两种场景给出可行查询:
场景1:只需要分类的基础信息(TaskCategory的字段)
只从关联查询中选取TaskCategory的字段,和第二个查询的列数、类型保持一致:
SELECT tc.* FROM TaskCategory tc INNER JOIN TaskCategoryMeta tcm ON tc.cat_id = tcm.cat_id WHERE tcm.meta_name = 'HR_DEPT_SUPPORT' AND tcm.meta_value = 1 UNION ALL SELECT * FROM TaskCategory WHERE parent_id = 0 AND type = 1;
注:用
UNION ALL代替UNION可以避免自动去重,提升查询性能(一级分类和符合条件的子分类不会有重复记录)。
场景2:需要包含TaskCategoryMeta的字段
一级分类没有对应的Meta记录,用NULL填充这些字段,保证两个查询列数一致:
SELECT tc.cat_id, tc.parent_id, tc.name, tc.type, tcm.meta_name, tcm.meta_value FROM TaskCategory tc INNER JOIN TaskCategoryMeta tcm ON tc.cat_id = tcm.cat_id WHERE tcm.meta_name = 'HR_DEPT_SUPPORT' AND tcm.meta_value = 1 UNION ALL SELECT cat_id, parent_id, name, type, NULL AS meta_name, NULL AS meta_value FROM TaskCategory WHERE parent_id = 0 AND type = 1;
内容的提问来源于stack exchange,提问作者user369287
相关产品推荐
相关产品推荐

