xia0chun
V2EX  ›  问与答

请教关于 MYSQL 的 join 查询

  •  
  •   xia0chun · Nov 24, 2014 · 3561 views
    This topic created in 4201 days ago, the information mentioned may be changed or developed.

    现有两个表
    table1:
    id, name
    1, 张一
    2, 张二
    3, 张三
    4, 张四
    table2:
    id, name
    1, 张一
    3, 张三
    5, 张五

    问题:需要查询出table1中不在table2中的记录,即
    id, name
    2, 张二
    4, 张四

    由于对数据库只是学了个皮毛,希望各位指点
    ps:我现在可以查出table1中在table2中的记录,SQL如下
    SELECT * FROM table1
    right join table2
    on table1.id = table2.id

    再次表示感谢 :)

    11 replies    2014-11-24 18:42:22 +08:00
    xia0chun
        1
    xia0chun  
    OP
       Nov 24, 2014
    自己来回答吧,再加一个where条件就可以了
    SELECT * FROM table1
    left join table2
    on table1.id = table2.id
    where table2.id is NULL
    fengchang
        2
    fengchang  
       Nov 24, 2014
    把right join改成inner join就行了
    xia0chun
        3
    xia0chun  
    OP
       Nov 24, 2014
    @fengchang 我想要查出table1中 不在 table2中的记录,要是用inner join应该是找出table1和table2中相同的记录吧?
    Seans
        4
    Seans  
       Nov 24, 2014   ❤️ 1
    select * from table1 where id not in(select id from table2);
    feiyuanqiu
        5
    feiyuanqiu  
       Nov 24, 2014   ❤️ 1
    直接用1L的SQL就行了,后面的朋友们的回复都不太靠谱...
    xia0chun
        6
    xia0chun  
    OP
       Nov 24, 2014
    @Seans 嗯嗯真是难者不会 会者不难呀,感谢已发

    @feiyuanqiu 谢谢指点,感谢已发
    fengchang
        7
    fengchang  
       Nov 24, 2014
    @xia0chun sorry看错了,是1L那样
    Raidal
        8
    Raidal  
       Nov 24, 2014
    刚刚正好用left join和where写了条查询差集的sql
    coolzjy
        9
    coolzjy  
       Nov 24, 2014
    为什么不用not in?
    iyaozhen
        10
    iyaozhen  
       Nov 24, 2014
    4楼方法更简单除暴吧。
    kenzi
        11
    kenzi  
       Nov 24, 2014 via Android
    我都用4楼的方法
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5243 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 99ms · UTC 09:04 · PVG 17:04 · LAX 02:04 · JFK 05:04
    ♥ Do have faith in what you're doing.