34,587
社区成员
发帖
与我相关
我的任务
分享
-- 左连接是满足LZ的要求的
-- 语句返回A,B中所有符合where后条件的记录, 也就是要查询的CN_CODE
-- 再左连接C表, 如果C表有要查询的CN_CODE将返回C表实际的字段值, 如果没有将以NULL返回
-- 所以筛选C表字段时都加上了一个ISNULL的函数, 用户判断如果C表不存在该值将以0,或''值替换NULL
select a.CN_CODE, a.CN_A1, a.CN_A2, b.CN_B1, b.CN_B2,
isnull(c.CN_C1, '') as CN_C1, isnull(c.CN_COST, 0) as CN_COST
from A as a
join B as b
on a.CN_CODE = b.CN_CODE
left join C as c
on B.CN_CODE = c.CN_CODE
where a.CN_CODE = 'LZ传入的CN_CODE'
--Create test Data
CREATE TABLE A
(
cn_code varchar(10),
a1 smallint,
a2 smallint,
a3 smallint,
a4 smallint,
a5 smallint
PRIMARY KEY(cn_code)
)
INSERT INTO A
SELECT '001', 1, 1, 1, 1, 1 UNION ALL
SELECT '002', 2, 2, 2, 2, 2
CREATE TABLE B
(
cn_code varchar(10),
b1 smallint,
b2 smallint,
b3 smallint,
b4 smallint,
b5 smallint
)
INSERT INTO B
SELECT '001', 1, 1, 1, 1, 1 UNION ALL
SELECT '002', 2, 2, 2, 2, 2
CREATE TABLE C
(
cn_code varchar(10),
c1 smallint,
c2 smallint,
c3 smallint,
c4 smallint,
c5 smallint,
cn_cost varchar(100)
)
INSERT INTO C
SELECT '001', 3, 3, 3, 3, 3, 'cn_cost'
SELECT
A.cn_code,
A.a1,
B.b1,
ISNULL(C.cn_cost, '') AS cn_cost
FROM A
LEFT JOIN B
ON A.cn_code = B.cn_code
LEFT JOIN C
ON A.cn_code = C.cn_code
WHERE
A.cn_code = '001'
DROP TABLE A
DROP TABLE B
DROP TABLE C
CREATE TABLE A
(
cn_code varchar(10),
a1 smallint,
a2 smallint,
a3 smallint,
a4 smallint,
a5 smallint
PRIMARY KEY(cn_code)
)
INSERT INTO A
SELECT '001', 1, 1, 1, 1, 1 UNION ALL
SELECT '002', 2, 2, 2, 2, 2
CREATE TABLE B
(
cn_code varchar(10),
b1 smallint,
b2 smallint,
b3 smallint,
b4 smallint,
b5 smallint
)
INSERT INTO B
SELECT '001', 1, 1, 1, 1, 1 UNION ALL
SELECT '002', 2, 2, 2, 2, 2
CREATE TABLE C
(
cn_code varchar(10),
c1 smallint,
c2 smallint,
c3 smallint,
c4 smallint,
c5 smallint,
cn_cost varchar(100)
)
INSERT INTO C
SELECT '001', 3, 3, 3, 3, 3, 'cn_cost'
SELECT
A.cn_code,
A.a1,
B.b1,
ISNULL(C.cn_cost, '') AS cn_cost
FROM A
LEFT JOIN B
ON A.cn_code = B.cn_code
LEFT JOIN C
ON A.cn_code = C.cn_code
WHERE
A.cn_code = '001'
DROP TABLE A
DROP TABLE B
DROP TABLE C
select T.*,c.CN_C1,isnull(c.CN_COST,0)
from
(select a.CN_CODE,a.CN_A1,a.CN_A2,b.CN_B1,b.CN_B2,c.CN_C1,isnull(c.CN_COST,0)
from A ,B
where A.CN_CODE=B.CN_CODE) T
left join C on T.CN_CODE=C.CN_CODE
---2 where c.CN_CODE like 'CC01%'
CREATE TABLE format
(
formatID smallint,
formatName nvarchar(100)
PRIMARY KEY(formatID)
)
INSERT INTO format
SELECT 1, 'Thank You!' UNION ALL
SELECT 2, 'Very Much'
SELECT formatID, formatName FROM format
DROP TABLE format
join连接...
codeselect a.CN_CODE,a.CN_A1,a.CN_A2,b.CN_B1,b.CN_B2,c.CN_C1,isnull(c.CN_COST,0)
FROM A a left join B on a.cn_code=b.CN_CODE
left join C c on a.cn_code=c.CN_CODE
select a.CN_CODE,a.CN_A1,a.CN_A2,b.CN_B1,b.CN_B2,c.CN_C1,isnull(c.CN_COST,0) as c.CN_COST
from A left join B on A.CN_CODE=B.CN_CODE
left join C on A.CN_CODE=C.CN_CODE
select a.CN_CODE,a.CN_A1,a.CN_A2,b.CN_B1,b.CN_B2,c.CN_C1,isnull(c.CN_COST,0)
from A left join B on A.CN_CODE=B.CN_CODE
left join C on A.CN_CODE=C.CN_CODE
用左連接.