【问题标题】:MySQL - select specific columns based on another column value with where clause includedMySQL - 根据包含 where 子句的另一个列值选择特定列
【发布时间】:2020-04-06 12:21:42
【问题描述】:

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

有一个表结构如下:

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

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

  • select * from table if ColA = 1 then ColB like '%some_criteria%' else if ColA = 0 then (ColB like '%some_criteria%' and ColC like '%some_criteria%')

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

  • 如果 ColA 的值为“1”,则仅在 ColB 中搜索
  • 如果 ColA 的值为“0”,则在 ColB 和 ColC 中搜索

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

提前感谢您的帮助!

【问题讨论】:

标签: mysql conditional-statements


【解决方案1】:

您可以使用WHERE 子句中的条件来实现 SQL Switch/Case in 'where' clause

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 会返回不同的行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 2015-08-22
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 2022-11-15
    相关资源
    最近更新 更多