加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 从table1中选择*不存在于table2中的条件

发布时间:2020-12-12 08:26:46 所属栏目:MsSql教程 来源:网络整理
导读:我有2张桌子一个是可以学习的东西的表.有一个JID指定每一行,并且对每一行都是唯一的.第二个表是已经学习的东西(JID)的日志,也是学习它的人的用户标识.我目前正在使用它来选择JID的所有数据,但只有用户基于userid所学习的数据. SELECT * FROM tablelist1LEFT J
我有2张桌子一个是可以学习的东西的表.有一个JID指定每一行,并且对每一行都是唯一的.第二个表是已经学习的东西(JID)的日志,也是学习它的人的用户标识.我目前正在使用它来选择JID的所有数据,但只有用户基于userid所学习的数据.
SELECT * 
FROM tablelist1
LEFT JOIN tablelog2 ON (tablelist1.JID = tablelog2.JID) 
                       AND tablelog2.UID = 'php var'
WHERE tablelog2.JID IS NOT NULL

我现在需要选择要学习的行的行,但只有用户标识没有学到的东西.我显然很新,忍受我. :)我尝试使用IS NULL,但似乎它的工作原理,它给了重复的JID的一个是NULL,一个是正确的.

解决方法

使用LEFT JOIN / IS NULL:
SELECT t.*
     FROM TABLE_LIST t
LEFT JOIN TABLE_LOG tl ON tl.jid = t.jid
    WHERE tl.jid IS NULL

使用NOT IN:

SELECT t.*
  FROM TABLE_LIST t
 WHERE t.jid NOT IN (SELECT tl.jid
                       FROM TABLE_LOG tl
                   GROUP BY tl.jid)

使用NOT EXISTS:

SELECT t.*
  FROM TABLE_LIST t
 WHERE NOT EXISTS(SELECT NULL
                    FROM TABLE_LOG tl
                   WHERE tl.jid = t.jid)

FYI
LEFT JOIN / IS NULL和NOT IN在MySQL中是等效的 – 它们将执行相同的操作,而NOT EXISTS的速度较慢/效率较低.更多细节:http://explainextended.com/2009/09/18/not-in-vs-not-exists-vs-left-join-is-null-mysql/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读