【发布时间】:2014-05-29 02:29:17
【问题描述】:
我已阅读 MSDN / Technet 并了解子选择内部应该有一个来自外部选择的列来加入,但我的表结构并不完全是我所追求的。我有一个有 2 列的表,比如 Name 和 Type。可能有Name 的重复条目和Type 的重复条目,但Name 和Type 的记录不重复(就像这两列的唯一键一样)。
小提琴样例:http://sqlfiddle.com/#!3/95f3b/3
示例代码:
DECLARE @food AS TABLE (FoodName NVARCHAR(200), FoodType NVARCHAR(200))
DECLARE @NEWfoods AS TABLE (FoodName NVARCHAR(200), FoodType NVARCHAR(200))
INSERT INTO @food (FoodName, FoodType) VALUES
('Apples', 'Fruit')
,('Avocado','Fruit')
,('Bananas', 'Fruit')
,('Mangos', 'Fruit')
,('Bread', 'Grain')
,('Cottage Cheese', 'Dairy')
,('Tacos', 'Meals')
,('Carrots', 'Vegetables')
,('Celery', 'Vegatables')
INSERT INTO @NEWfoods ( FoodName, FoodType ) VALUES
('Avocado','Vegetables')
,('Apples','Fruit')
,('Salt','Preservative')
,('Turkey','Protein')
,('Bread','Grain')
,('Bread','Grain')
,('Tacos','Meals')
SELECT
f.FoodName
,f.FoodType
FROM @food AS f
WHERE NOT EXISTS (
SELECT * FROM @NEWfoods
)
我期望发生的是 Avocado:Vegetables 将被插入,因为基表包含 Avocado:Fruit 但不包含 Avocado:Vegetables(请记住,我使用 both 列作为唯一键), Bread:Grain 和 Tacos:Meals 根本不会被插入,因为它们已经存在于基表中,而且 Salt:Preservative 也会被插入。
所以在所有这一切结束时,我似乎没有在这里使用正确的功能 - NOT EXISTS 本身不是正确的方法。编码器的块!任何帮助,将不胜感激。 :)
【问题讨论】:
标签: sql sql-server sql-server-2008 tsql exists