首页 > 解决方案 > MySQL - 根据包含 where 子句的另一个列值选择特定列

问题描述

我将永远欠一个可以帮助我解决我遇到的案件/问题的人:

有一个表结构如下:

id(AI)| ColA | ColB   | ColC
-----------------------------
1     |1     | lorem  | ipsum
2     |1     | dolor  | sit
3     |0     | amet   | nula
...

我想根据 ColA 中的值设置要搜索的列(ColB 或 ColC)。例如(伪查询):

基本上,在同一个查询中:

假设 ColB 存储文章标题,ColC 存储文章描述。ColA 存储文章类型。因此,如果文章类型为 1,则仅在标题中搜索,如果文章类型为 0,则在标题和描述中搜索。

预先感谢您的帮助!

标签: mysqlconditional-statements

解决方案


您可以使用“where”子句中的 SQL Switch/CaseWHERE子句 中的条件来执行此操作

SELECT *
FROM table
WHERE 
    (ColA = 1 AND ColB LIKE '%some_criteria%')
    OR
    (ColA = 0 AND (ColB LIKE '%some_criteria%' OR ColC LIKE '%some_criteria%'))

另外,一个简单UNION的例子可以作为另一个例子https://www.w3schools.com/sql/sql_union.asp

SELECT *
FROM table
WHERE ColA = 1 AND ColB LIKE '%some_criteria%'
UNION ALL
SELECT *
FROM table
WHERE ColA = 0 AND (ColB LIKE '%some_criteria%' OR ColC LIKE '%some_criteria%')

请注意,UNION ALL如果发生任何重复,它将返回重复,并且只UNION返回不同的行。


推荐阅读