我有以下案例:一个问题,5 个可能的答案。数据库有 5 列,其中每一列显然可以包含其中的每个答案,但总是一次一个,每个答案一次只出现在一列中。
例如我有(为了解释目的用语言名称简化):
language1 language2 language3 language4 language5
----------+-----------+---------+-----------+----------
english french german greek polish
当我想搜索语言既是英语又是希腊语的行时,我该怎么办?
我不想用
'WHERE english in (language1, language2, language3, language4, language5)
AND greek in (language1, language2, language3, language4, language5)';
因为这只是表格中的一个问题,而且如您所见,每个问题都可以有很多答案;我有 65 个以上的问题,所以查询会变得非常庞大...
我正在寻找类似'where (english, greek) in (language1, language2, language3, language4, language5)'
的解决方案,尽管使用(英语、希腊语)
。
这样的事情是否可能,如果可能,如何实现?
感谢您的任何想法、提示或技巧!
最佳答案
使用 UNION
将您的列转换为行,然后从派生表中选择任何行都使用您所需语言的集合。
HAVING COUNT(*)
子句指定必须从您的 where 子句中匹配的语言数量。在下面的示例中,2
表示所有返回的 ID 都将以 English
和 Greek
作为答案。
SELECT id
FROM
(
SELECT id, language1 language from table1
UNION
SELECT id, language2 language from table1
UNION
SELECT id, language3 language from table1
UNION
SELECT id, language4 language from table1
UNION
SELECT id, language5 language from table1
) t1 WHERE language IN ('English','Greek')
GROUP BY id
HAVING COUNT(*) = 2
关于mysql查询在多行中找到多个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24320919/