我有以下案例:一个问题,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)'
之类的解决方案,但这会导致使用(english, greek)
时出错。
这样的事情是否可能,如果是这样,怎么样?
感谢您的任何想法,提示或提示!
答案 0 :(得分:0)
使用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