假设我有一个存储过程,该存储过程返回了两个表A和B中的所有数据。
表_A
Id Name
-----------------
1 Chuck
2 Richard
3 Arthur
表B
Status Nickname IdTableA
-----------------------------
1 cthulhu 1
2 Poe 3
查询:
SELECT
a.Name, b.Status, b.Nickname
FROM
Table_A a
LEFT JOIN
Table_B b ON b.IdTableA = a.Id
如果我现在运行存储过程,即使它们在table_B中没有记录,它也会返回所有记录(如您所见,table_A中的记录编号2尚不存在-也许明天,或者在一个月...-)。我需要做的是丢弃状态号2(位于表B中)。当我使用类似的东西时会发生问题:
where b.Status = 1
或
where b.Status <> 2
为什么?因为它只返回状态为1的值,所以我只需要丢弃状态为2的记录,还可以返回table_A中的记录,而table_B上没有记录。
有办法做到吗?
希望您能帮助我。预先感谢。
答案 0 :(得分:1)
以下屏幕截图是否满足您的要求?
尝试以下操作:
declare @table_a table (id int, name varchar(100))
insert into @table_a select 1, 'Chuck'
union select 2, 'Richard'
union select 3, 'Arthur'
declare @table_b table (status int, nickname varchar(100), id_table_a int)
insert into @table_b
select 1, 'cthulhu', 1
union select 2, 'Poe', 3
select * from @table_a
select * from @table_b
select *
from @table_a a
left join @table_b b on a.id = b.id_table_a
where isnull(status,'') <> 2