首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL LEFT JOIN,该怎么解决

2013-11-14 
SQL LEFT JOININSERT INTO TESTA VALUES (101,1001,10001)--INSERT INTO TESTB VALUES (201,200

SQL LEFT JOIN


INSERT INTO TESTA VALUES ('101','1001','10001');

--INSERT INTO TESTB VALUES ('201','2001','101');
--INSERT INTO TESTB VALUES ('201','2001','102');
--DELETE FROM TESTB;


A.A1对应B.A1
现在TESTA 的数据是固定的.
TESTB 的数据 如果存在A.A1=B.A1的情况下则返回TESTA 的这条数据
        或者 如果TESTB 里无数据则 也返回TESTA 的这条数据
只有TESTB 里存在的数据A.A1<>B.A1 则不返回任何数据。
期望是一条SQL来解决
[解决办法]

 
if object_id('Tempdb..#TESTA') is not null drop table #TESTA
if object_id('Tempdb..#TESTB') is not null drop table #TESTB
create table #TESTA(
[A1] varchar(10),
[A2] varchar(10),
[A3] varchar(10)
)
create table #TESTB(
[B1] varchar(10),
[B2] varchar(10),
[A1] varchar(10)
)

INSERT INTO #TESTA VALUES ('101','1001','10001');
INSERT INTO #TESTA VALUES ('102','1001','10001');
INSERT INTO #TESTA VALUES ('103','1001','10001');
INSERT INTO #TESTA VALUES ('104','1001','10001');

INSERT INTO #TESTB VALUES ('201','2001','101');
INSERT INTO #TESTB VALUES ('201','2001','105');
 
 
 select a.* from #TestA a left join #TestB b on a.A1=b.A1
where  (select  count(1) from #TestB where A1 not in(select A1 from #TestA))=0
------------
A1         A2         A3
---------- ---------- ----------

(0 行受影响)

[解决办法]
select * from #TESTA a 
WHERE 1=CASE WHEN (
(SELECT COUNT(1) FROM #TESTA a WHERE EXISTS (SELECT 1 FROM #TESTB b WHERE a.A1<>b.A1))+(SELECT COUNT(1) FROM #TESTA a WHERE EXISTS (SELECT 1 FROM #TESTB b WHERE a.A1=b.A1))<>(SELECT COUNT(1) FROM #TESTA) )
AND  (SELECT COUNT(1) FROM #TESTB )<>0
THEN 2 ELSE 1 END
 
些少了一个条件

热点排行