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

标签 mysql sql where-clause

我有以下案例:一个问题,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 都将以 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

关于mysql查询在多行中找到多个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24320919/

相关文章:

java - Hibernate HQL 多对一连接

php - 我如何表达一个条件,以便 sql 语句提取 2 小时前解决的订单?

mysql - SQL insert using RAND() for inserting random value - INSERT into TINYINT?

MySQL:如果连接表中的列包含 x,则选择具有相同 ID 的所有行

MySQL 内连接与Where 子句问题

MySQL判断满足哪个条件

MySQL错误1054 : unknown column job_title

sql - 错误 1046 未选择数据库,如何解决?

mysql - 如何从每个类别中获得前 40% 的销售贡献者?

MYSQL如何将外部计算值输入到行中