有三个表 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 2
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
gransh 2019-05-28 16:06:33 +08:00 via iPhone
左右为男
|
22
belin520 2019-05-28 16:20:53 +08:00
男言之瘾
|
24
ily433664 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
|