选择记录,它是唯一的记录,而不是在另一个表中链接到特定记录

时间:2011-02-04 01:34:11

标签: sql

我希望从@ table1中选择一条记录的id,当该记录是该表中唯一的记录,并且当前没有在@ t1Tot2中链接到另一个表中的特定id。

以下查询有效,但我想知道是否有更好的方法。它被设置为当前返回55添加到表@ table1的唯一记录的id。将另一条记录插入@ table1将导致它不返回任何记录(好),并且在@ t1Tot2中链接@ t2id将使它返回none(良好)。有没有更好的办法?感谢。

DECLARE @t2id INT
SET @t2id = 1 --Record to link to
DECLARE @table1 TABLE
(
t1id int
)
DECLARE @t1Tot2 TABLE
(
t1id INT,
t2id int
)
INSERT INTO @table1
( t1id )
VALUES  ( 55  -- t1id - int
)

--Will cause the query below to return no records because of having more than 1 record to be linked to
--  INSERT INTO @table1
--        ( t1id )
--VALUES  ( 2  -- t1id - int
--          )    

--Will cause the query below to return no records because of already being linked to the t1id
--INSERT INTO @t1Tot2
--( t1id, t2id )
--VALUES  ( 55, -- t1id - int
--@t2id  -- t2id - int
--)    

SELECT MAX(a.t1id)
FROM @table1 a
LEFT JOIN @t1Tot2 b ON a.t1id = b.t1id AND b.t2id = 1
HAVING COUNT(1) = 1 AND SUM( CASE WHEN b.t2id IS NULL THEN 0 ELSE 1 END ) = 0

2 个答案:

答案 0 :(得分:1)

--declare @table1 table (t1id int)
--declare @t1Tot2 table (t1id int)

select a.t1id
from @table1 a
where (select count(*) from (select top 2 * from @table1) x) = 1
and not exists (
    select * from @t1Tot2 b
    where b.t1id = a.t1id)

答案 1 :(得分:1)

select a.aid
from a
left outer join b on a.bid=b.bid
where b.bid is null
group by a.aid
having count(*) = 1

应该也可以使用 sql server 特定的sql btw。