22,209
社区成员
发帖
与我相关
我的任务
分享
IF OBJECT_ID('[A]') IS NOT NULL
DROP TABLE [A]
GO
CREATE TABLE [A](id INT,code VARCHAR(10),NAME VARCHAR(10))
INSERT INTO [A] SELECT 1,'a1','a1' UNION ALL SELECT 2,'a2','a2' UNION ALL SELECT 3,'a2','a2'
IF OBJECT_ID('[B]') IS NOT NULL
DROP TABLE [B]
GO
CREATE TABLE [B](aid INT ,cid INT )
INSERT INTO [B] SELECT 1,1 UNION ALL SELECT 1,2 UNION ALL SELECT 2,3 UNION ALL SELECT 2,4
IF OBJECT_ID('[C]') IS NOT NULL
DROP TABLE [C]
GO
CREATE TABLE [C](id INT,code VARCHAR(10),NAME VARCHAR(10))
INSERT INTO [C] SELECT 1,'c1','c1' UNION ALL SELECT 2,'c2','c2' UNION ALL SELECT 3,'c3','c3' UNION ALL SELECT 4,'c4','c4'
------------------------------------------------查询--------------------------------------------------------------------------
SELECT b.id,b.code,b.name,c.code,c.name FROM(
SELECT id,MIN(code) code,MIN(name) name,MIN(cid) cid FROM [A] a LEFT JOIN [B] b ON a.id=b.aid GROUP BY a.id)b LEFT JOIN [C] c ON b.cid=c.id
-----------------------------------------------结果--------------------------------------------------------------------------
/*
id code NAME code name
----------- ---------- ---------- ---------- ----------
1 a1 a1 c1 c1
2 a2 a2 c3 c3
3 a2 a2 NULL NULL
(3 行受影响)
*/
SELECT a.id,a.code,a.name,c.code,c.name
FROM #a AS a
LEFT JOIN (
SELECT aid,MIN(cid) AS cid FROM #b GROUP BY aid
) AS b ON a.id=b.aid
LEFT JOIN #c AS c ON b.cid=c.id
输出结果:
id code name code name
1 a1 a1 c1 c1
2 a2 a2 c3 c3
3 a3 a3 NULL NULL
select a.id, a.code, a.name, c.code, c.name
from a left join (select aid, min(cid) cid from b group by aid) t on t.aid=a.id
left join c on c.id=t.cid