V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
AnonymousAccout
V2EX  ›  MySQL

给定一组数据,怎样找出数据库里没有的

  •  
  •   AnonymousAccout · 2017-03-31 10:48:43 +08:00 via iPhone · 3450 次点击
    这是一个创建于 2828 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如我这有一组学号,用 select * from table where in 来查找, in 里面有 50 个学号,但是 select 出来只有 40 个,我改如何找出在数据库中不存在的学号呢,先谢谢大家了
    16 条回复    2017-04-01 11:24:51 +08:00
    bbao
        1
    bbao  
       2017-03-31 11:00:26 +08:00
    还是放原题吧
    AnonymousAccout
        2
    AnonymousAccout  
    OP
       2017-03-31 11:04:28 +08:00 via iPhone
    @bbao 就是这样的需求,别人扔了个 excel 过来,里面一组学号,然后要在一个表里查哪个学号不存在 Orz
    ivvei
        3
    ivvei  
       2017-03-31 11:05:28 +08:00   ❤️ 1
    集合减。
    minus 的语法 MySQL 没实现,可以用 left join 来做。
    ivvei
        4
    ivvei  
       2017-03-31 11:06:49 +08:00   ❤️ 1
    或者 not in 可以。但是你都得构造 50 个学号的一个集合。
    ivvei
        5
    ivvei  
       2017-03-31 11:08:09 +08:00
    我在 3 楼多敲了个 left
    ivvei
        6
    ivvei  
       2017-03-31 11:11:12 +08:00
    在 4 楼少敲了个“也”。 在 5 楼只打出了半句话…… 还有半句是“却没有敲出后面要用条件删选”, 我这特么都醉了……
    AnonymousAccout
        7
    AnonymousAccout  
    OP
       2017-03-31 11:11:12 +08:00 via iPhone
    @ivvei not in 的话是 select from 构建的集合 not in 实际的表 这样做吗
    ivvei
        8
    ivvei  
       2017-03-31 11:13:26 +08:00   ❤️ 1
    @AnonymousAccout 是。 select 一条条记录 union 起来,或者你直接把 excel 数据插入一个表,然后 select 那个表,这样写起来省点事。然后 not in 你要对比的表。
    billgreen1
        9
    billgreen1  
       2017-03-31 11:14:46 +08:00   ❤️ 1
    SELECT
    *
    FROM table1 t1
    LEFT JOIN table2 t2 ON t1.id = t2.id
    WHERE t2.id IS NULL
    Immortal
        10
    Immortal  
       2017-03-31 11:18:43 +08:00
    not in 不就好了
    既然你自己说 in 能从 50 几个里查到 40 几个 剩下的就是不存在的
    neilwong
        11
    neilwong  
       2017-03-31 11:56:41 +08:00
    工作中遇到过类似的问题,后来解决的方案是:

    先做一次初始化,然后把有的数据更新,最后查未更新过的。

    解决方案非常不优化,但胜在快速简单...
    liuxin5959
        12
    liuxin5959  
       2017-03-31 22:54:13 +08:00
    请独立完成作业。
    AnonymousAccout
        13
    AnonymousAccout  
    OP
       2017-04-01 07:59:08 +08:00 via iPhone
    @liuxin5959 不是作业啊😂
    mingl0280
        14
    mingl0280  
       2017-04-01 09:08:18 +08:00   ❤️ 1
    @Immortal 你这个错了, NOT IN 是数据库中存在但不匹配 IN 列表的项。
    @AnonymousAccout 全部 Select 出来做个哈希表比对下就行了。
    AnonymousAccout
        15
    AnonymousAccout  
    OP
       2017-04-01 10:19:17 +08:00 via iPhone
    这属于差集运算 最后得出还是左连接 + is null 效率最高
    Immortal
        16
    Immortal  
       2017-04-01 11:24:51 +08:00
    @mingl0280 你说的对的 是我没过大脑 第一反应
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   945 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:12 · PVG 05:12 · LAX 13:12 · JFK 16:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.