【问题标题】:MySQL select specific entry from a table which is not in another tableMySQL从不在另一个表中的表中选择特定条目
【发布时间】:2012-06-10 08:26:21
【问题描述】:

当我尝试从不在另一个表中的表中选择特定条目时,我在 MySQL 中遇到了问题。我知道这句话听起来很疯狂,但这是我正在尝试做的一个例子。

表用户:

    user_id,username,password (plus other columns not important to this)

表格文章:

    article_is,user_id,content (plus others)

表格视图(如果用户查看特定文章,则用于存储数据):

   view_id,article_id,user_id,date

现在,我正在尝试选择那些没有阅读特定文章的用户,例如 id 为 10 的文章。所以他们在视图表中没有条目。

我希望它现在更有意义。 感谢您的回答。五、

【问题讨论】:

    标签: php mysql sql database


    【解决方案1】:
    SELECT user_id FROM users u
    LEFT JOIN views v ON v.user_id=u.user_id AND v.article_id = 10
    WHERE v.user_id IS NULL
    

    【讨论】:

      【解决方案2】:

      试试这个:

      SELECT user_id
      FROM users
      WHERE user_id NOT IN (
        SELECT user_id
        FROM views
        WHERE article_id = 10
      )
      

      【讨论】:

      • 感谢您的回答.. 它有效,但是由于性能,我将坚持以下答案:)
      • 在决定选择哪个版本之前,先测试一下(性能)。
      • 呵呵,发现,性能并没有太大差异,.. 太糟糕了,我不能将更多答案标记为正确:/
      • @ypercube 我只有少量条目可以尝试。两种方法的总时间相同,各个步骤的时间不同。你认为哪种方法更好?
      • 在 DRapp 的回答中查看我的评论中的链接。
      【解决方案3】:

      执行 NOT IN 查询通常不会提高性能...相反,使用 LEFT JOIN 并查找 NULL 会更好。

      select 
            u.User_ID
         from 
            Users U
               LEFT JOIN Views V
                  on U.User_ID = V.User_ID 
                 AND v.Article_ID = 10
         where
            V.User_ID IS NULL
      

      【讨论】:

      • 性能差异:不正确,根据@Quassnoi。见:NOT IN vs. NOT EXISTS vs. LEFT JOIN / IS NULL: MySQL
      • 谢谢你的回答,但是vearutop 更快地发布了一个答案,我会给他正确的答案..再次感谢你!
      • @Vojtech,我可以尊重这一点......但是只是发布一个没有解释的查询......这真的能帮助你理解为什么有些东西有效吗?我试图描述使用某种查询方法背后的原因。
      猜你喜欢
      • 2021-10-31
      • 2015-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      • 1970-01-01
      相关资源
      最近更新 更多