Sql server 2008 SQL Server 2008:基于其他表更新列
表格A(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
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
)