当前位置: 首页 > 面试题库 >

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

公沈浪
2023-03-14
问题内容

我正在使用MySQL包含以下各列的表:

id, january, february, march, april, etc

表中的数据如下所示:

aa, 0, 0, 1, 0
ab, 1, 0, 1, 0
ac, 1, 1, 0, 0
ad, 1, 1, 1, 0

要查询它,我可以轻松地做到这一点:

select * from table where january = 1 and february = 1

结果将是:

ac, 1, 1, 0, 0
ad, 1, 1, 1, 0

我想知道是否有办法做到这一点:

select * from table where table.columns = 1

我想在表达式中使用表列,而无需实际手动指定名称(将其键入)。

奖励(+1)问题
能否使用Match / Against像这样完成:

select * from table
where
(
    match (somehow,get,the,table,columns,I,need,here)
    against (1 in boolean mode)
)

谢谢你的时间!:)


问题答案:

您必须使用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子句。

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



 类似资料:
  • 问题内容: 有可能用一个SQL语句,多个表截断吗? 像这样: 问候 问题答案: 不可以,您只能使用TRUNCATE命令截断单个表。要截断多个表,可以使用T-SQL并遍历表名以一次截断每个表名。 您可以在@tableList变量中用逗号分隔所有表名,是的,如果有前缀,则可以截断来自不同模式的多个表。

  • 我正在尝试将多列添加到phpMyAdmin中的现有表中,但我一直收到相同的错误: #1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册以获取正确的语法... 我在写: 我已经参考了过去在StackOverflow上的帖子,我正在遵循专家的建议,那么为什么我会出错呢?

  • 问题内容: 我正在使用+ + + 。 我有4个DELETE,并且只需要1个数据库请求,因此我将DELETE命令与“;” …相连,但是它总是失败。 它引发此错误: 但是,如果我将此SQL粘贴到PhpMyAdmin中,它将始终成功… 如果我在单个查询中写它也是成功的。 感谢帮助! 问题答案: 我猜您正在使用node-mysql。( 但也应该适用于 node- mysql2 ) 该文件说: 出于安全原因

  • 我正在通过drools-guvnor创建规则。我已经导入了我的POJO模型,并且一切都设置正确(我已经进行了测试),但我似乎无法弄清楚如何让“匹配”运算符正确工作。这是我到目前为止所拥有的(源代码): 有谁能给我一些关于在drools guvnor中使用多个正则表达式检查的提示,或者一些让它工作的方法。他们的论坛似乎真的很陈腐。我在网上找到的大多数答案都没有答案。 任何帮助都将不胜感激。

  • 问题内容: 我正在使用语句,以便将输入插入到SQL Server数据库表中。如何在块中执行多个条件。请参考下面的代码。 当前,它仅执行此行。如何执行条件中的所有3行()。 前任 : 这就是我的期望。我只想更新旧字段()并将记录插入同一张表。我不能用逗号分隔这些语句。SQL发出 语法错误 谢谢你。 问题答案: 您可以使用 它来实现: 请记住,此方法有一些局限性,更多信息: MS Connect

  • 问题内容: 这合法吗? 问题答案: 对于它的价值,并取决于是否将相同的数据插入到相同的表中,最好用一个插入插入多个值, 例如