--我有三张表A,B,C,三表中都有字段CN_CODE,以A表中的CN_CODE为主键
--现要从三张表中同时取指定CN_CODE的若干字段,其中C表的字段CN_COST要求当表C中存在CN_CODE时,显示对应的CN_CODE,当不存在时,CN_COST置空或置0
--形如
--select a.CN_CODE,a.CN_A1,a.CN_A2,b.CN_B1,b.CN_B2,c.CN_C1,c.CN_COST
--FROM A a, B b, C c
--WHERE.....
--如何去限制条件,得到想要的结果
请大侠指教
--现要从三张表中同时取指定CN_CODE的若干字段,其中C表的字段CN_COST要求当表C中存在CN_CODE时,显示对应的CN_CODE,当不存在时,CN_COST置空或置0
--形如
--select a.CN_CODE,a.CN_A1,a.CN_A2,b.CN_B1,b.CN_B2,c.CN_C1,c.CN_COST
--FROM A a, B b, C c
--WHERE.....
--如何去限制条件,得到想要的结果
请大侠指教
FROM A a left jion B on a.cn_code=b.CN_CODE
left join C c on a.cn_code=c.CN_CODE
ISNULL
使用指定的替换值替换 NULL。语法
ISNULL ( check_expression , replacement_value ) 参数
check_expression将被检查是否为 NULL的表达式。check_expression 可以是任何类型的。replacement_value在 check_expression 为 NULL时将返回的表达式。replacement_value 必须与 check_expresssion 具有相同的类型。 返回类型
返回与 check_expression 相同的类型。
FROM A a left jion 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)
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 a left jion B on a.cn_code=b.CN_CODE
left join C c on a.cn_code=c.CN_CODE
from A left join B on A.CN_CODE=B.CN_CODE
left join C on A.CN_CODE=C.CN_CODE
改过来: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
--现要从三张表中同时取指定CN_CODE的若干字段,其中C表的字段CN_COST要求当表C中存在CN_CODE时,显示对应的CN_CODE,当不存在时,CN_COST置空或置0
--形如
--select a.CN_CODE,a.CN_A1,a.CN_A2,b.CN_B1,b.CN_B2,c.CN_C1,c.CN_COST
--FROM A a, B b, C c
--WHERE.....
--如何去限制条件,得到想要的结果
请大侠指教join连接...
(
cn_code varchar(10),
cn_name varchar(100),
PRIMARY KEY(cn_code)
)
INSERT INTO A
SELECT '001', 'Lily' UNION ALL
SELECT '002', 'Jam'CREATE TABLE B
(
cn_code varchar(10),
cn_address varchar(100)
)
INSERT INTO B
SELECT '001', 'China' UNION ALL
SELECT '002', 'Japan'CREATE TABLE C
(
cn_code varchar(10),
cn_detail varchar(100)
)
INSERT INTO C
SELECT '001', 'It is a Test.'SELECT
A.cn_code,
A.cn_name,
B.cn_address,
ISNULL(C.cn_detail, '') AS cn_detail
FROM A
LEFT JOIN B
ON A.cn_code = B.cn_code
LEFT JOIN C
ON A.cn_code = C.cn_codeDROP TABLE A
DROP TABLE B
DROP TABLE C
CREATE TABLE A
(
cn_code varchar(10),
cn_name varchar(100),
PRIMARY KEY(cn_code)
)
INSERT INTO A
SELECT '001', 'Lily' UNION ALL
SELECT '002', 'Jam'CREATE TABLE B
(
cn_code varchar(10),
cn_address varchar(100)
)
INSERT INTO B
SELECT '001', 'China' UNION ALL
SELECT '002', 'Japan'CREATE TABLE C
(
cn_code varchar(10),
cn_detail varchar(100)
)
INSERT INTO C
SELECT '001', 'It is a Test.'SELECT
A.cn_code,
A.cn_name,
B.cn_address,
ISNULL(C.cn_detail, '') AS cn_detail
FROM A
LEFT JOIN B
ON A.cn_code = B.cn_code
LEFT JOIN C
ON A.cn_code = C.cn_codeDROP TABLE A
DROP TABLE B
DROP TABLE C
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 formatDROP TABLE format
--我有三张表A,B,C,三表中都有字段CN_CODE,以A表中的CN_CODE为主键
--现要从三张表中同时取 指定CN_CODE 的若干字段,其中C表的字段CN_COST要求当表C中存在CN_CODE时,显示对应的CN_CODE,当不存在时,CN_COST置空或置0
--形如
--A表字段 CN_CODE, A1, A2,A3, A4, A5
--B表字段 CN_CODE, B1, B2, B3, B4, B5
--C表字段 CN_CODE, C1, C2, C3, C4, C5, CN_COST
--现在我要获取 A.CN_CODE, A.A1, B.B1, B.B2, C.CN_COST
--条件是:外部获取一CN_CODE, 当A.CN_CODE = 该CN_CODE AND B.CN_CODE = 该CN_CODE时(一定存在),但该外部输入的CN_CODE 在C表中不一定存在,
--我要的效果是,当输入的CN_ID在C表中有的时候,直接获取对应的值,当不存在的时候,CN_COST显示为0或NULL
--以上各位大侠给的,我试了一下,可以,但好像条件未起作用,
--如果,我这条件是不确定的(模糊查询),如数据库总有CC01-xx,cc01,cc01-yy,当我输入CC01时,又该如何判断,尤其是判断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 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, 2CREATE 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, 2CREATE 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_costFROM A
LEFT JOIN B
ON A.cn_code = B.cn_code
LEFT JOIN C
ON A.cn_code = C.cn_codeWHERE
A.cn_code = '001'DROP TABLE A
DROP TABLE B
DROP TABLE C
--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, 2CREATE 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, 2CREATE 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_costFROM 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
-- 左连接是满足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'