mysql查询在多行中查找多个值?

时间:2014-06-20 06:06:33

标签: mysql sql where

我有以下案例:一个问题,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)时出错。

这样的事情是否可能,如果是这样,怎么样?

感谢您的任何想法,提示或提示!

1 个答案:

答案 0 :(得分:0)

使用UNION将列转换为行,然后从派生表中选择任何行所在语言集。

HAVING COUNT(*)子句指定必须从where子句匹配的语言数。在下面的示例中,2表示所有返回的ID都会同时包含EnglishGreek

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