【问题标题】:MYSQL Select on two values one columnMYSQL 在一列上选择两个值
【发布时间】:2012-12-21 04:38:11
【问题描述】:

我需要从我的 mysql 表中选择一行。

表格中有两行具有一个相等的值。

TABLE
-----
articleId
keywordId

现在我需要选择一篇文章,它的关键字 ID = 1,关键字 ID = 12。

每个指向关键字的链接都有自己的记录。

我怎样才能通过一次选择查询来知道是否有一篇文章与这两个关键字匹配?

【问题讨论】:

    标签: mysql sql select group-by


    【解决方案1】:
    SELECT * 
    FROM `table_name` 
    WHERE `keywordId` = '1' AND `keywordId` = '12' 
    

    【讨论】:

    • 确保拼写 'TABLE' :)
    【解决方案2】:

    试试这个:

    SELECT *  
    FROM tablename 
    WHERE keywordId IN (1, 12) 
    GROUP BY articleId 
    HAVING COUNT(*) = 2; 
    

    查看SQL FIDDLE DEMO

    【讨论】:

    • SELECT ccdn_nid, COUNT( * ) FROM ccdn_cmdt WHERE cmdt_tid IN (1, 31584) GROUP BY ccdn_nid HAVING COUNT( * ) =2 我试过了,但仍然得到结果仅在 1 中有记录。有什么想法吗?
    • @user1955019 查看演示。
    • 嘿 Saharsh,我仍然无法正常工作:SELECT ccdn_nid FROM ccdn_cmdt WHERE cmdt_tidIN (1, 31641) GROUP BY ccdn_nid HAVING COUNT(*) = 2 我的表是这样的: ccdn_nid int(11) cmdt_tid int(11) ccdncmdt_outpid int(11) 仍然得到一个结果结果。
    • 这真的很奇怪,在 Fiddle 中它可以工作:sqlfiddle.com/#!2/eff9f/2。但是在我们的 mysqlserver 中完全相同的查询会产生 50000 条记录...
    • 找到了!由于 KeywordId 为 1 但有另一个 outputID 的记录更多,因此它计为 2。现在只剩下一个 WHERE 已修复。谢谢萨沙什! :)
    【解决方案3】:

    这称为Relation Division。这是一种方法:

    SELECT * 
    FROM tablename 
    WHERE articleId IN
    (
       SELECT articleId
       FROM tablename
       WHERE KeywordId IN (1, 2) 
       GROUP BY articleId
       HAVING COUNT(KeywordId ) = 2
    );;
    

    【讨论】:

    • 在每分钟数百次查询中使用此查询时会大大降低数据库速度吗?
    • @user1955019 这取决于您在该表中有多少行。
    【解决方案4】:
    SELECT * 
    FROM table 
    WHERE keywordId IN (1, 12);
    

    【讨论】:

      【解决方案5】:

      您还可以对每个关键字使用子查询并加入它们

      select k1.articleId from
      (
          select articleId from TABLE where keywordId = 1
      ) k1
      inner join
      (
          select articleId from TABLE where keywordId = 12
      ) k2 on k1.articleId = k2.articleId
      

      根据索引和表大小,这可能比 Group By 更有效

      【讨论】:

        【解决方案6】:
        select ArticleId from Table where keywordId = 1
        Intersect
        select ArticleId from Table where KeywordId = 12
        

        【讨论】:

        • 这不存在或不工作。它可能在以前的版本中有效。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-08
        • 1970-01-01
        • 2021-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多