gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 06:30:25 27 4
gpt4 key购买 nike

我正在使用 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 - 使用 MySQL 将一个值与表中的多个列(在一个语句中)匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1372860/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com