› 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
cpj
V2EX  ›  MySQL

被 SQL 查询男住了~

  •  
  •   cpj ·
    cpj001 · May 28, 2019 · 8507 views
    This topic created in 2682 days ago, the information mentioned may be changed or developed.

    有三个表 TableA, TableB, TableC, 现在我的步骤是:

    1. 得到 TableA top 5 的 msid
    SELECT TOP 5 msid
    FROM TableA
    结果比如为(1, 2, 3, 4, 5)
    
    # 2. 根据 msid 得到 price 字段
    SELECT  c.price
    FROM TableC c
    LEFT JOIN TableB b
    ON c.msid=b.msid
    WHERE c.msid in (1, 2, 3, 4, 5)
    

    现在我想一起显示 c.price, a.msid 和 a 的其他字段,不知道 SQL 怎么写,而不是这样一步步来

    27 replies  •  2019-05-28 16:53:19 +08:00
    triptipstop
        1
    triptipstop  
       May 28, 2019
    SELECT c.price
    FROM TableC c
    LEFT JOIN TableB b
    ON c.msid=b.msid
    WHERE c.msid in (
    SELECT TOP 5 msid
    FROM TableA
    )
    H0711
        2
    H0711  
       May 28, 2019
    你这 table b 有啥用
    cpj
        3
    cpj  
    OP
       May 28, 2019
    @triptipstop 我要一起显示 c.price, a.msid, a.type 等等,不单单是 SELECT c.price
    lihongjie0209
        4
    lihongjie0209  
       May 28, 2019
    为什么不在代码里组装?
    cpj
        5
    cpj  
    OP
       May 28, 2019
    @lihongjie0209 本来打算写在代码逻辑里,但是想看看有没有 SQL 语句可以完成
    gosansam
        6
    gosansam  
       May 28, 2019
    table b 是来搞笑的嘛
    cpj
        7
    cpj  
    OP
       May 28, 2019
    @lhjl1314 LEFT JOIN TableB b ON c.msid=b.msid 也可以去掉,可以去掉 TableB,但还是不知道 SQL 怎么写
    cpj
        8
    cpj  
    OP
       May 28, 2019
    @gosansam 我突然发现,是的...直接 copy 过来没注意...
    lihongjie0209
        9
    lihongjie0209  
       May 28, 2019
    @cpj 千万别有这种想法, 需求一变万一 SQL 满足不了还得重写
    phpmysql
        10
    phpmysql  
       May 28, 2019   ❤️ 2
    select
    c.price, temp.*
    from
    c
    join (
    SELECT
    TOP 5 msid, *
    FROM TableA
    ) as temp on c.msid = temp.msid
    yiyi11
        11
    yiyi11  
       May 28, 2019
    楼上也可以,我这是等值连接:
    select a.*, c.*
    from TableA a,
    TableC c
    where a.msid = c.msid
    and a.msid in (SELECT TOP 5 msid FROM TableA);
    hhhzccc
        12
    hhhzccc  
       May 28, 2019
    没用到 b 表的值,你左连接干啥子
    chen2019
        13
    chen2019  
       May 28, 2019 via Android
    迫于问题过于简单,只回答,子查询
    chen2019
        14
    chen2019  
       May 28, 2019 via Android
    然而我错了
    直接 a top5 再 join c
    应该不用子查询
    greatbody
        15
    greatbody  
       May 28, 2019
    为什么是“男”住了?
    kangzai50136
        16
    kangzai50136  
       May 28, 2019 via Android
    @greatbody 强人锁男(滑稽)
    EmotionV
        17
    EmotionV  
       May 28, 2019
    知男而上(滑稽
    woshijidan
        18
    woshijidan  
       May 28, 2019 via Android
    @kangzai50136 男♂上加男
    cpj
        19
    cpj  
    OP
       May 28, 2019
    @phpmysql ok 啦,感谢
    cpj
        20
    cpj  
    OP
       May 28, 2019
    @yiyi11 吼
    iixy
        21
    iixy  
       May 28, 2019 via iPhone
    左右为男
    icanfork
        22
    icanfork  
       May 28, 2019
    男言之瘾
    cpj
        23
    cpj  
    OP
       May 28, 2019
    @belin520 你萌玩起来了是吧~ 那我就勉为骑男地看看
    lovelive1024
        24
    lovelive1024  
       May 28, 2019
    男上加男
    xnode
        25
    xnode  
       May 28, 2019
    ♂奸男险阻、排忧解男、进退两男、迎男而解、知男而上、男上加男、勉为骑男、强人锁男、自身男抱、左右围男、覆水男收、一言男尽~[滑稽]
    chirsamao
        26
    chirsamao  
       May 28, 2019
    你应该先分析, 第一步查询的结果是作为第二步的条件的, 所以你可以将第一步的 sql 带入到第二步的条件中,即第二步前面不变,从 in 开始, in(SELECT TOP 5 msid FROM TableA ), 这样虽然效率没有 join 高,但是很有效
    luanluan
        27
    luanluan  
       May 28, 2019
    @triptipstop 我一直想知道左关联和直接查询的方式查 有什么区别?
    @chirsamao
    @yiyi11
    各位大神指点 ,迷糊
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4632 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 66ms · UTC 07:38 · PVG 15:38 · LAX 00:38 · JFK 03:38
    ♥ Do have faith in what you're doing.