Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 SQL Server 2008:基于其他表更新列_Sql Server 2008_Count - Fatal编程技术网

Sql server 2008 SQL Server 2008:基于其他表更新列

Sql server 2008 SQL Server 2008:基于其他表更新列,sql-server-2008,count,Sql Server 2008,Count,表格A(id int,匹配字符(15),多字符(10)) 表B(匹配字符(15),匹配字符(10)) 现在,我想填充TableA.multiple=“YES”如果在TableB中对应的匹配项存在多个匹配项2 预期结果 int match multiple 1 100 YES 2 101 NULL 3 102 YES 4 103 NULL 提前谢谢 我失败的尝试: Update A SET multiple = 'YES' From tableA A

表格A
id int,匹配字符(15),多字符(10)

表B
匹配字符(15),匹配字符(10)

现在,我想填充
TableA.multiple=“YES”
如果在
TableB
中对应的匹配项存在多个匹配项2

预期结果

int match multiple
1   100    YES
2   101    NULL
3   102    YES
4   103    NULL
提前谢谢

我失败的尝试:

Update A 
SET multiple = 'YES' 
From tableA A
Inner join tableB B ON A.match = B.match
WHERE (Select count(distinct(B.match2)) from TableB) > 2

从一个额外的详细版本开始,只是为了清晰起见:

UPDATE TableA
SET multiple = 'YES'
WHERE match in (
    -- isolate the multiples
    SELECT match from (
        -- count the matches
        SELECT count(*) as c, match from TableB
        GROUP BY match ) x
    WHERE c > 1
)
使用HAVING子句,您可以更改此

    SELECT match from (
        SELECT count(*) as c, match from TableB
        GROUP BY match ) x
    WHERE c > 1
……为此:

   SELECT match from TableB
   GROUP BY match
   HAVING count(*) > 1
现在我们有:

UPDATE TableA
SET multiple = 'YES'
WHERE match in (
   SELECT match from TableB
   GROUP BY match
   HAVING count(*) > 1
)
<>我确信它可以更紧凑,但我个人会被<代码> >更新>代码>混淆,包含非显而易见的代码>连接< /COD>子句,尤其是在我接到“数据库不工作”的时候,深夜


也适用于编码。

当表中的同一匹配项有超过1条(匹配2)记录时,我需要填写“是”,因为没有考虑该数字,所以这不起作用。@BhupinderSingh检查这一条。您应该使用显式连接语法。Venk-您编辑了它,在编辑之前,结果可能有效,但不会给出预期的结果。此外,您还应该使用显式连接语法。这个想法很好,但在许多情况下,它的性能会很慢。
UPDATE TableA
SET multiple = 'YES'
WHERE match in (
    -- isolate the multiples
    SELECT match from (
        -- count the matches
        SELECT count(*) as c, match from TableB
        GROUP BY match ) x
    WHERE c > 1
)
    SELECT match from (
        SELECT count(*) as c, match from TableB
        GROUP BY match ) x
    WHERE c > 1
   SELECT match from TableB
   GROUP BY match
   HAVING count(*) > 1
UPDATE TableA
SET multiple = 'YES'
WHERE match in (
   SELECT match from TableB
   GROUP BY match
   HAVING count(*) > 1
)