
有三个表 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 怎么写,而不是这样一步步来
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 ) |
2 H0711 May 28, 2019 你这 table b 有啥用 |
3 cpj OP @triptipstop 我要一起显示 c.price, a.msid, a.type 等等,不单单是 SELECT c.price |
4 lihongjie0209 May 28, 2019 为什么不在代码里组装? |
5 cpj OP @lihongjie0209 本来打算写在代码逻辑里,但是想看看有没有 SQL 语句可以完成 |
6 gosansam May 28, 2019 table b 是来搞笑的嘛 |
7 cpj OP @lhjl1314 LEFT JOIN TableB b ON c.msid=b.msid 也可以去掉,可以去掉 TableB,但还是不知道 SQL 怎么写 |
9 lihongjie0209 May 28, 2019 @cpj 千万别有这种想法, 需求一变万一 SQL 满足不了还得重写 |
10 phpmysql May 28, 2019 select c.price, temp.* from c join ( SELECT TOP 5 msid, * FROM TableA ) as temp on c.msid = temp.msid |
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); |
12 hhhzccc May 28, 2019 没用到 b 表的值,你左连接干啥子 |
13 chen2019 May 28, 2019 via Android 迫于问题过于简单,只回答,子查询 |
14 chen2019 May 28, 2019 via Android 然而我错了 直接 a top5 再 join c 应该不用子查询 |
15 greatbody May 28, 2019 为什么是“男”住了? |
16 kangzai50136 May 28, 2019 via Android @greatbody 强人锁男(滑稽) |
17 EmotionV May 28, 2019 知男而上(滑稽 |
18 woshijidan May 28, 2019 via Android @kangzai50136 男♂上加男 |
21 iixy May 28, 2019 via iPhone 左右为男 |
22 icanfork May 28, 2019 男言之瘾 |
24 lovelive1024 May 28, 2019 男上加男 |
25 xnode May 28, 2019 ♂奸男险阻、排忧解男、进退两男、迎男而解、知男而上、男上加男、勉为骑男、强人锁男、自身男抱、左右围男、覆水男收、一言男尽~[滑稽] |
26 chirsamao May 28, 2019 你应该先分析, 第一步查询的结果是作为第二步的条件的, 所以你可以将第一步的 sql 带入到第二步的条件中,即第二步前面不变,从 in 开始, in(SELECT TOP 5 msid FROM TableA ), 这样虽然效率没有 join 高,但是很有效 |
27 luanluan May 28, 2019 |