被 SQL 查询男住了~ - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
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 8136 views
    This topic created in 2526 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     Solana     987 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 68ms UTC 20:14 PVG 04:14 LAX 13:14 JFK 16:14
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86