被 SQL 查询男住了~

2019 年 5 月 28 日
 cpj

有三个表 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 怎么写,而不是这样一步步来

8118 次点击
所在节点    MySQL
27 条回复
triptipstop
2019 年 5 月 28 日
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
2019 年 5 月 28 日
你这 table b 有啥用
cpj
2019 年 5 月 28 日
@triptipstop 我要一起显示 c.price, a.msid, a.type 等等,不单单是 SELECT c.price
lihongjie0209
2019 年 5 月 28 日
为什么不在代码里组装?
cpj
2019 年 5 月 28 日
@lihongjie0209 本来打算写在代码逻辑里,但是想看看有没有 SQL 语句可以完成
gosansam
2019 年 5 月 28 日
table b 是来搞笑的嘛
cpj
2019 年 5 月 28 日
@lhjl1314 LEFT JOIN TableB b ON c.msid=b.msid 也可以去掉,可以去掉 TableB,但还是不知道 SQL 怎么写
cpj
2019 年 5 月 28 日
@gosansam 我突然发现,是的...直接 copy 过来没注意...
lihongjie0209
2019 年 5 月 28 日
@cpj 千万别有这种想法, 需求一变万一 SQL 满足不了还得重写
phpmysql
2019 年 5 月 28 日
select
c.price, temp.*
from
c
join (
SELECT
TOP 5 msid, *
FROM TableA
) as temp on c.msid = temp.msid
yiyi11
2019 年 5 月 28 日
楼上也可以,我这是等值连接:
select a.*, c.*
from TableA a,
TableC c
where a.msid = c.msid
and a.msid in (SELECT TOP 5 msid FROM TableA);
hhhzccc
2019 年 5 月 28 日
没用到 b 表的值,你左连接干啥子
chen2019
2019 年 5 月 28 日
迫于问题过于简单,只回答,子查询
chen2019
2019 年 5 月 28 日
然而我错了
直接 a top5 再 join c
应该不用子查询
greatbody
2019 年 5 月 28 日
为什么是“男”住了?
kangzai50136
2019 年 5 月 28 日
@greatbody 强人锁男(滑稽)
EmotionV
2019 年 5 月 28 日
知男而上(滑稽
woshijidan
2019 年 5 月 28 日
@kangzai50136 男♂上加男
cpj
2019 年 5 月 28 日
@phpmysql ok 啦,感谢
cpj
2019 年 5 月 28 日
@yiyi11

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/568307

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX