Mysql 如果9/10列匹配,则返回该行。怎么做?
我试图弄清楚如何进行查询,当大多数列与查询匹配时,该查询将返回行。 查询最好与PostgreSQL兼容。(如果它足够基本,那么我可以在SQLite中本地测试它,那将是非常棒的!但它不一定非得如此。) 我在这里发现了一个类似的线程,但该查询仅与Oracle的DB兼容 关于如何最有效地实现这一目标,有什么想法吗 示例表:Mysql 如果9/10列匹配,则返回该行。怎么做?,mysql,sql,database,postgresql,sqlite,Mysql,Sql,Database,Postgresql,Sqlite,我试图弄清楚如何进行查询,当大多数列与查询匹配时,该查询将返回行。 查询最好与PostgreSQL兼容。(如果它足够基本,那么我可以在SQLite中本地测试它,那将是非常棒的!但它不一定非得如此。) 我在这里发现了一个类似的线程,但该查询仅与Oracle的DB兼容 关于如何最有效地实现这一目标,有什么想法吗 示例表: col1|col2|col3 A | B | B Y | Y | Y X | B | X Y | B | B 查询将查找col1=A、co
col1|col2|col3
A | B | B
Y | Y | Y
X | B | X
Y | B | B
查询将查找col1=A、col2=B和col3=B的列
我试图获得的输出:
col1|col2|col3
A | B | B
Y | B | B
为SQLite创建表架构
CREATE TABLE "t" (
"col1" TEXT,
"col2" TEXT,
"col3" TEXT
);
样本数据:
INSERT INTO 't' (col1, col2, col3)
VALUES ('A', 'B', 'B'),
('Y', 'B', 'B'),
('X', 'B', 'X'),
('A', 'B', 'X'),
('Y', 'Y', 'Y')
对于PostgreSQL,
WHERE
子句中的每个条件都可以计算为1表示TRUE
,或0表示FALSE
,因此您可以执行以下操作:
select * from tablename
where (col1 = 'A')::int + (col2 = 'B')::int + (col3 = 'B')::int +
............................................
>= 9
对于MySql或SQLite,它更简单:
select * from tablename
where (col1 = 'A') + (col2 = 'B') + (col3 = 'B') +
............................................
>= 9
我就是这样做的。创建另一个具有“正确”值的表,并将其命名为
answer\u key
。然后将其交叉连接到当前表
SELECT c.*
from candidates c cross join answer_key ak
order by (c.ans1=ak.ans1)::int+(c.ans2=ak.ans2)::int+(c.ans3=ak.ans3)::int desc;
这里有一个问题:请在您的问题中添加示例数据。请阅读中的前几段,并相应地阅读您的问题。我不确定您是如何获得输出的。您是否希望按匹配数排序?为什么希望结果中的行
Y | Y | Y
和X | B | X
?他们不符合9/10的条件?是的,对不起,他们不应该在那里。顺序才是最重要的。