您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用MySQL将值与表中的多个列(在一条语句中)匹配

使用MySQL将值与表中的多个列(在一条语句中)匹配

您必须使用Prepared Statement,因为您要执行的操作只能通过动态sql来完成:

SET @stmt = 'SELECT * FROM YOUR_TABLE WHERE 1 = 1 '
SET @stmt = CONCAT(@stmt, (SELECT CONCAT_WS(' AND ', CONCAT(column_name, ' = 1 '))
                            FROM INFORMATION_SCHEMA.COLUMNS
                           WHERE table_name = 'YOUR_TABLE'
                             AND table_schema = 'db_name'
                             AND column_name NOT IN ('id')));

PREPARE stmt FROM @stmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

一个SET语句构造一个基本的SELECT语句;“ 1 = 1”部分正好可以使“ AND column = 1”的连接更容易

第二条SET语句将查询内容连接起来,以根据表名将列的列表获取到第一条SET语句中字符串的末尾。这个想法是这样的:

SELECT CONCAT_WS(' AND ', CONCAT(column_name, ' = 1 '))
  FROM INFORMATION_SCHEMA.COLUMNS
 WHERE table_name = 'YOUR_TABLE'
   AND table_schema = 'db_name'
   AND column_name NOT IN ('id')

…将返回类似于“ AND january = 1 AND february = 1 ...”的行。如果WHERE子句中不需要其他列,则必须更新NOT IN子句。

其余的只是标准的准备好的语句,所有这些都必须在存储过程中进行。

MySQL 2022/1/1 18:51:41 有282人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶