请问这条多表联查的SQL怎么写?

我的问题如下图所述,数据库结构及数据在下面代码块,求大牛帮忙看看..

图片描述

我希望得到的结果是:
图片描述

表结构及数据如下

CREATE TABLE A(
id INT NOT NULL,
num INT NOT NULL
)CHARSET=utf8;

INSERT INTO A(id,num) VALUES(1,5),(2,7),(3,6);

CREATE TABLE B(
aid INT NOT NULL,
sid INT NOT NULL,
content VARCHAR(20) NOT NULL
)CHARSET=utf8;

INSERT INTO B(aid,sid,content) VALUES(3,1,'A'),(3,2,'B'),(3,3,'C');

CREATE TABLE C(
id INT NOT NULL,
time INT NOT NULL,
libs VARCHAR(20) NOT NULL
)CHARSET=utf8;

INSERT INTO C(id,time,libs) VALUES(2,18,'wagaga'),(3,16,'aaaa'),(1,15,'cc'),(3,17,'dddd'),(4,14,'eeee'),(3,10,'ffff'),(3,11,'bbbb');

这么可以满足我的需求,但是执行效率太低了...

select * from
(
SELECT distinct
    a.id,a.num,b.aid,b.sid,b.content,c.id as cid,c.time,c.libs
FROM
    a a
LEFT JOIN b b ON b.aid = a.id
LEFT JOIN c ON c.id = b.sid
WHERE a.id = 3
ORDER BY time DESC
) as TMP
GROUP BY cid ;

有没有大牛能提供一个更效率的写法呢?

阅读 4.5k
6 个回答
SELECT
    a.id,a.num,b.aid,b.sid,b.content,c.id,substring_index(group_concat(c.time order by c.time desc),',',1) ctime,substring_index(group_concat(c.libs order by c.time desc),',',1) clibs
FROM a
JOIN b ON b.aid = a.id
JOIN c ON c.id = b.sid
WHERE a.id = 3
GROUP BY c.id ;
SELECT
    *
FROM
    a a
LEFT JOIN b b ON b.aid = a.id
LEFT JOIN c ON c.id = b.sid
WHERE a.id = 3
GROUP BY c.id

如果是上面的数据的话,这条sql应该满足了。。。在不满足,就不管了......

clipboard.png
这是我的查询结果

select A.num,b.content,c.time,c.libs from A left join B on A.id=B.id left join C on C.id = A.id order by C.time desc limit 0,1

你想要什么,问题都没有描述清楚。。。

select * from
(
SELECT distinct
    a.id,a.num,b.aid,b.sid,b.content,c.id as cid,c.time,c.libs
FROM
    a
LEFT JOIN b  ON b.aid = a.id
LEFT JOIN c ON c.id = b.sid
WHERE a.id = 3
ORDER BY time DESC
) as TMP
GROUP BY cid ;

效率有问题..

新手上路,请多包涵

SELECT

*

FROM

a a

LEFT JOIN b b ON b.aid = a.id
LEFT JOIN c ON c.id = b.sid
WHERE a.id = 3
order by c.time desc
GROUP BY b.aid

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题