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 · Mar 31, 2017 via iPhone · 4151 views
    This topic created in 3365 days ago, the information mentioned may be changed or developed.
    比如我这有一组学号,用 select * from table where in 来查找, in 里面有 50 个学号,但是 select 出来只有 40 个,我改如何找出在数据库中不存在的学号呢,先谢谢大家了
    16 replies    2017-04-01 11:24:51 +08:00
    bbao
        1
    bbao  
       Mar 31, 2017
    还是放原题吧
    AnonymousAccout
        2
    AnonymousAccout  
    OP
       Mar 31, 2017 via iPhone
    @bbao 就是这样的需求,别人扔了个 excel 过来,里面一组学号,然后要在一个表里查哪个学号不存在 Orz
    ivvei
        3
    ivvei  
       Mar 31, 2017   ❤️ 1
    集合减。
    minus 的语法 MySQL 没实现,可以用 left join 来做。
    ivvei
        4
    ivvei  
       Mar 31, 2017   ❤️ 1
    或者 not in 可以。但是你都得构造 50 个学号的一个集合。
    ivvei
        5
    ivvei  
       Mar 31, 2017
    我在 3 楼多敲了个 left
    ivvei
        6
    ivvei  
       Mar 31, 2017
    在 4 楼少敲了个“也”。 在 5 楼只打出了半句话…… 还有半句是“却没有敲出后面要用条件删选”, 我这特么都醉了……
    AnonymousAccout
        7
    AnonymousAccout  
    OP
       Mar 31, 2017 via iPhone
    @ivvei not in 的话是 select from 构建的集合 not in 实际的表 这样做吗
    ivvei
        8
    ivvei  
       Mar 31, 2017   ❤️ 1
    @AnonymousAccout 是。 select 一条条记录 union 起来,或者你直接把 excel 数据插入一个表,然后 select 那个表,这样写起来省点事。然后 not in 你要对比的表。
    billgreen1
        9
    billgreen1  
       Mar 31, 2017   ❤️ 1
    SELECT
    *
    FROM table1 t1
    LEFT JOIN table2 t2 ON t1.id = t2.id
    WHERE t2.id IS NULL
    Immortal
        10
    Immortal  
       Mar 31, 2017
    not in 不就好了
    既然你自己说 in 能从 50 几个里查到 40 几个 剩下的就是不存在的
    neilwong
        11
    neilwong  
       Mar 31, 2017
    工作中遇到过类似的问题,后来解决的方案是:

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

    解决方案非常不优化,但胜在快速简单...
    liuxin5959
        12
    liuxin5959  
       Mar 31, 2017
    请独立完成作业。
    AnonymousAccout
        13
    AnonymousAccout  
    OP
       Apr 1, 2017 via iPhone
    @liuxin5959 不是作业啊😂
    mingl0280
        14
    mingl0280  
       Apr 1, 2017   ❤️ 1
    @Immortal 你这个错了, NOT IN 是数据库中存在但不匹配 IN 列表的项。
    @AnonymousAccout 全部 Select 出来做个哈希表比对下就行了。
    AnonymousAccout
        15
    AnonymousAccout  
    OP
       Apr 1, 2017 via iPhone
    这属于差集运算 最后得出还是左连接 + is null 效率最高
    Immortal
        16
    Immortal  
       Apr 1, 2017
    @mingl0280 你说的对的 是我没过大脑 第一反应
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5784 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 94ms · UTC 06:08 · PVG 14:08 · LAX 23:08 · JFK 02:08
    ♥ Do have faith in what you're doing.