create table curbh
(
bh varchar(20),
xmbh varchar(10)
)create table bhk
(
xmbh varchar(10))insert curbh values('001','Al')
insert curbh values('001','Mg')
insert curbh values('001','Fe')
insert curbh values('002','Ca')
insert curbh values('002','Mg')
insert curbh values('002','Cu')
insert curbh values('002','Al')
insert bhk values('Al')
insert bhk values('Mg')
insert bhk values('Fe')
insert bhk values('Ca')
insert bhk values('Cu')
insert bhk values('Ag')
insert bhk values('Au')现在要实现 001 在 bhk 中 没有的项目 Ca Cu Ag Au
002 在 bhk 中没有的项目 Fe Ag Au
要列出这样的结果
001 Ca
001 Cu
001 Ag
001 Au
002 Fe
002 Ag
002 Au各路神仙大侠帮忙 谢谢!
(
bh varchar(20),
xmbh varchar(10)
)create table bhk
(
xmbh varchar(10))insert curbh values('001','Al')
insert curbh values('001','Mg')
insert curbh values('001','Fe')
insert curbh values('002','Ca')
insert curbh values('002','Mg')
insert curbh values('002','Cu')
insert curbh values('002','Al')
insert bhk values('Al')
insert bhk values('Mg')
insert bhk values('Fe')
insert bhk values('Ca')
insert bhk values('Cu')
insert bhk values('Ag')
insert bhk values('Au')现在要实现 001 在 bhk 中 没有的项目 Ca Cu Ag Au
002 在 bhk 中没有的项目 Fe Ag Au
要列出这样的结果
001 Ca
001 Cu
001 Ag
001 Au
002 Fe
002 Ag
002 Au各路神仙大侠帮忙 谢谢!
(
bh varchar(20),
xmbh varchar(10)
) create table bhk
(
xmbh varchar(10) ) insert curbh values('001','Al')
insert curbh values('001','Mg')
insert curbh values('001','Fe')
insert curbh values('002','Ca')
insert curbh values('002','Mg')
insert curbh values('002','Cu')
insert curbh values('002','Al')
insert bhk values('Al')
insert bhk values('Mg')
insert bhk values('Fe')
insert bhk values('Ca')
insert bhk values('Cu')
insert bhk values('Ag')
insert bhk values('Au') SELECT *
FROM (
SELECT *
FROM (SELECT DISTINCT bh FROM curbh) AS A
CROSS APPLY bhk
) AS A
WHERE NOT EXISTS(SELECT * FROM curbh WHERE bh=A.bh AND xmbh=a.xmbh)DROP TABLE curbh,bhk/*
bh xmbh
-------------------- ----------
001 Ca
001 Cu
001 Ag
001 Au
002 Fe
002 Ag
002 Au(7 行受影响)
*/
go
create table bhk (xmbh varchar(10))
go
insert curbh values('001','Al')
insert curbh values('001','Mg')
insert curbh values('001','Fe')
insert curbh values('002','Ca')
insert curbh values('002','Mg')
insert curbh values('002','Cu')
insert curbh values('002','Al')
insert bhk values('Al')
insert bhk values('Mg')
insert bhk values('Fe')
insert bhk values('Ca')
insert bhk values('Cu')
insert bhk values('Ag')
insert bhk values('Au')
go
select distinct * from (select a.bh,b.xmbh from curbh a cross join bhk b) c where not exists(select 1 from curbh where bh=c.bh and xmbh=c.xmbh) order by c.bh,c.xmbh
/*
bh xmbh
-------------------- ----------
001 Ag
001 Au
001 Ca
001 Cu
002 Ag
002 Au
002 Fe
*/
drop table curbh,bhk
go
FROM (
SELECT *
FROM (SELECT DISTINCT bh FROM curbh) AS A
CROSS JOIN bhk
) AS A
WHERE NOT EXISTS(SELECT * FROM curbh WHERE bh=A.bh AND xmbh=a.xmbh)
刚发 就有人回答
谢谢
但是我用的是 SQL 2000
稍微改动一下:
SELECT *
FROM (
SELECT *
FROM (SELECT DISTINCT bh FROM curbh) AS A, bhk
) AS A
WHERE NOT EXISTS(SELECT * FROM curbh WHERE bh=A.bh AND xmbh=a.xmbh)
left join 第一张表的连接列在第二张表中没有匹配是,第二张表中的值返回null
right join 第二张表的连接列在第一张表中没有匹配是,第一张表中的值返回null
full join 返回两张表中的行 left join+right join
inner join 只返回两张表连接列的匹配项
create table bhk (xmbh varchar(10))
insert curbh values('001','Al')
insert curbh values('001','Mg')
insert curbh values('001','Fe')
insert curbh values('002','Ca')
insert curbh values('002','Mg')
insert curbh values('002','Cu')
insert curbh values('002','Al')
insert bhk values('Al')
insert bhk values('Mg')
insert bhk values('Fe')
insert bhk values('Ca')
insert bhk values('Cu')
insert bhk values('Ag')
insert bhk values('Au') select distinct *
from (select a.bh,b.xmbh from curbh a ,bhk b ) t
where not exists(select 1 from curbh where bh=t.bh and xmbh=t.xmbh)drop table curbh,bhkbh xmbh
-------------------- ----------
001 Ag
001 Au
001 Ca
001 Cu
002 Ag
002 Au
002 Fe(7 行受影响)