使用不存在的地方更新语句

时间:2019-07-31 10:21:08

标签: sql sql-server

我正在尝试执行以下操作: 当第一个表(变量)中的行在第二个表中不存在时,将status列设置为1

我尝试过:

update @table1
set status=1
where  NOT EXISTS (select top 1 1 from @table2 where @table1.foo=@table2.foo)

但这甚至无法编译,无法在Where语句中识别@table1

  

必须声明标量变量“ @ table1”。

对此有任何线索吗?

6 个答案:

答案 0 :(得分:5)

您的方法很好。您只需要表别名,因为@在SQL Server中用于表示变量(标量或表),因此对于别名来说是有问题的:

update t1
    set status = 1
    from @table1 t1
    where not exists (select 1 from @table2 t2 where t2.foo = t1.foo);

请注意,top 1在子查询中是不必要的。

答案 1 :(得分:2)

您可以通过用LEFT JOIN将两个表联接在一起并检查右侧是否为NULL来完成这种事情:

UPDATE t1
SET t1.status=1
FROM @table1 t1
LEFT JOIN @table2 t2
    ON t1.foo = t2.foo
WHERE t2.foo IS NULL

您遇到的特定错误是因为您没有声明@ table1作为表变量的语句,例如DECLARE @table1 TABLE (foo int)。如果table1不是变量,则不需要@

答案 2 :(得分:2)

您必须声明table1和table2变量

DECLARE @table1 YOUR_TABLE1_NAME;
DECLARE @table2 YOUR_TABLE2_NAME;

update @table1
set status=1
where NOT EXISTS (select top 1 from @table2 where @table1.foo=@table2.foo)

答案 3 :(得分:0)

不需要任何内部缩放比例查询

update @table1
set status=1
where  NOT EXISTS (select 1 from @table2 where @table1.foo=@table2.foo)

因为存在返回布尔值

您可以使用以下查询

update  @table1 
    set status=1
 where @table1.foo not in ( select foo from @table2 where foo is not null)

答案 4 :(得分:0)

有多种方法-使用angular.json"test": { "builder": "@angular-devkit/build-angular:karma", "options": { "main": "src/test.ts", "polyfills": "src/polyfills.ts", "tsConfig": "src/tsconfig.spec.json", "karmaConfig": "src/karma.conf.js", "styles": [], "scripts": [ "node_modules/jquery/dist/jquery.min.js", "node_modules/datatables.net/js/jquery.dataTables.js" ] } }, NOT IN查询进行内部查询:

NOT EXISTS

在上述查询上运行的示例架构;

JOIN

插入tab2值('a'); 插入tab2值('d');

答案 5 :(得分:0)

两个表都应使用别名。

DECLARE @TABLE_1 TABLE  (DEPT_NAME VARCHAR(50),DEP_ID INT)

INSERT INTO @TABLE_1(DEPT_NAME,DEP_ID)
SELECT 'IT',1 UNION ALL
SELECT 'HR',2 UNION ALL
SELECT 'ACCOUNT',3 UNION ALL
SELECT 'ADMIN',4 UNION ALL
SELECT 'SALES',5 UNION ALL
SELECT 'CEO',7 


DECLARE @TABLE_2 TABLE  (E_ID INT,EMP_NAME VARCHAR(50),DEP_ID INT)

INSERT INTO @TABLE_2(E_ID,EMP_NAME,DEP_ID)
SELECT 1,'JHON',1 UNION ALL
SELECT 2,'LITA',2 UNION ALL
SELECT 3,'MATT',1 UNION ALL
SELECT 4,'JEFF',1 UNION ALL
SELECT 5,'BROCK',2 UNION ALL
SELECT 6,'BOB',5 UNION ALL
SELECT 7,'SAM',4 UNION ALL
SELECT 8,'DAVID',3 UNION ALL
SELECT 9,'JACK',1 UNION ALL
SELECT 10,'GARY',4 UNION ALL
SELECT 11,'DONALD',6 



SELECT * FROM @TABLE_1 A WHERE  NOT EXISTS (SELECT DEP_ID  FROM @TABLE_2 B WHERE A.DEP_ID=B.DEP_ID )