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