SQL多OR条件查询列值时,如何返回满足条件的列?
实现方法:返回匹配行同时标记符合条件的列
完全可以实现,下面提供两种常用方案:
方式1:为每个列单独标记匹配状态
通过CASE WHEN语句给每个目标列生成匹配状态标识(比如“是/否”或1/0),既能筛选出符合条件的行,也能清楚看到每列的匹配情况:
SELECT id, -- 替换为你需要的唯一标识或其他字段 -- 为每个检查列添加匹配状态 CASE WHEN Goods_Services_String LIKE '%tokyo%' THEN '是' ELSE '否' END AS Goods_Services_Match, CASE WHEN Input_Materials_String LIKE '%tokyo%' THEN '是' ELSE '否' END AS Input_Materials_Match, CASE WHEN Property_Plant_Equipment_String LIKE '%tokyo%' THEN '是' ELSE '否' END AS Property_Plant_Equipment_Match, CASE WHEN Production_Process_String LIKE '%tokyo%' THEN '是' ELSE '否' END AS Production_Process_Match, CASE WHEN Capital_Expenditures_String LIKE '%tokyo%' THEN '是' ELSE '否' END AS Capital_Expenditures_Match, CASE WHEN Employee_Locations_String LIKE '%tokyo%' THEN '是' ELSE '否' END AS Employee_Locations_Match, CASE WHEN Contractors_Locations_String LIKE '%tokyo%' THEN '是' ELSE '否' END AS Contractors_Locations_Match, CASE WHEN Research_And_Development_Desc_String LIKE '%tokyo%' THEN '是' ELSE '否' END AS R_D_Match, CASE WHEN Distribution_String LIKE '%tokyo%' THEN '是' ELSE '否' END AS Distribution_Match, CASE WHEN Sales_And_Marketing_Desc_String LIKE '%tokyo%' THEN '是' ELSE '否' END AS Sales_Marketing_Match, -- 按需添加原表其他字段 ... FROM your_table_name -- 替换为实际表名 WHERE Goods_Services_String LIKE '%tokyo%' OR Input_Materials_String LIKE '%tokyo%' OR Property_Plant_Equipment_String LIKE '%tokyo%' OR Production_Process_String LIKE '%tokyo%' OR Capital_Expenditures_String LIKE '%tokyo%' OR Employee_Locations_String LIKE '%tokyo%' OR Contractors_Locations_String LIKE '%tokyo%' OR Research_And_Development_Desc_String LIKE '%tokyo%' OR Distribution_String LIKE '%tokyo%' OR Sales_And_Marketing_Desc_String LIKE '%tokyo%';
方式2:合并所有匹配的列名到一个字段
如果希望直接看到所有命中条件的列名,可以用字符串拼接函数将匹配的列名合并成一个字段,不同数据库的拼接函数略有差异,以下是MySQL示例:
SELECT id, CONCAT_WS(', ', CASE WHEN Goods_Services_String LIKE '%tokyo%' THEN 'Goods_Services_String' END, CASE WHEN Input_Materials_String LIKE '%tokyo%' THEN 'Input_Materials_String' END, CASE WHEN Property_Plant_Equipment_String LIKE '%tokyo%' THEN 'Property_Plant_Equipment_String' END, CASE WHEN Production_Process_String LIKE '%tokyo%' THEN 'Production_Process_String' END, CASE WHEN Capital_Expenditures_String LIKE '%tokyo%' THEN 'Capital_Expenditures_String' END, CASE WHEN Employee_Locations_String LIKE '%tokyo%' THEN 'Employee_Locations_String' END, CASE WHEN Contractors_Locations_String LIKE '%tokyo%' THEN 'Contractors_Locations_String' END, CASE WHEN Research_And_Development_Desc_String LIKE '%tokyo%' THEN 'Research_And_Development_Desc_String' END, CASE WHEN Distribution_String LIKE '%tokyo%' THEN 'Distribution_String' END, CASE WHEN Sales_And_Marketing_Desc_String LIKE '%tokyo%' THEN 'Sales_And_Marketing_Desc_String' END ) AS Matching_Columns, -- 按需添加原表其他字段 ... FROM your_table_name -- 替换为实际表名 WHERE Goods_Services_String LIKE '%tokyo%' OR Input_Materials_String LIKE '%tokyo%' OR Property_Plant_Equipment_String LIKE '%tokyo%' OR Production_Process_String LIKE '%tokyo%' OR Capital_Expenditures_String LIKE '%tokyo%' OR Employee_Locations_String LIKE '%tokyo%' OR Contractors_Locations_String LIKE '%tokyo%' OR Research_And_Development_Desc_String LIKE '%tokyo%' OR Distribution_String LIKE '%tokyo%' OR Sales_And_Marketing_Desc_String LIKE '%tokyo%';
注:若使用SQL Server,将CONCAT_WS替换为STRING_AGG;PostgreSQL同样使用STRING_AGG,需调整语法细节。
内容的提问来源于stack exchange,提问作者Adam Polak Moetsi
相关产品推荐
相关产品推荐

