【问题标题】:mysql query find multiple values in multiple rows?mysql查询在多行中查找多个值?
【发布时间】:2014-06-20 06:06:33
【问题描述】:

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

这样的事情可能吗?如果可以,怎么做?

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

【问题讨论】:

  • 你能分享你的示例表结构或一些带结构的数据
  • 这就是这样做的方法(使用“and”子句),也就是说,这取决于您的需求,但是具有 1 对 n 关系的中间数据表可能会更有效。另一个数据表将保存项目的 id 以及与该项目关联的所有语言的 id。
  • 感谢您的 cmets,我想我会选择发布的 netadictos。我认为这是体面地做到这一点的唯一方法。希望这次我能做对:-)

标签: mysql sql where


【解决方案1】:

使用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

【讨论】:

  • 感谢您的帮助!我看过它,虽然它会帮助我,但如果我有很多多项选择题,你的代码会使选择查询太长:-(但它又给了我一些想法,所以谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-10-02
  • 2011-09-18
  • 1970-01-01
  • 1970-01-01
  • 2021-01-30
  • 1970-01-01
  • 1970-01-01
  • 2021-10-28
相关资源
最近更新 更多