このクエリ
SELECT
FirstName, LastName, NCAAStats.AccountId, College_Translator.school_name, StatTypeId, COUNT(*) AS 'Count'
FROM NCAAstats
INNER JOIN College_Translator
ON College_Translator.AccountID = NCAAstats.AccountId
GROUP BY FirstName, LastName, NCAAStats.AccountId, College_Translator.school_name, CalendarYear, StatTypeId
HAVING COUNT(*) >1
ORDER BY 'Count' DESC
ISValid
ビットを0
に設定したいレコードを選択します。
これらのレコードは、入力エラーのためにデータベースに2回表示されるレコードです。
私は次のようなものを探しています:
UPDATE NCAAstats
SET IsValid = 0
WHERE (my select statement)
これはMSSQL SERVER2008にあります
ありがとう!
次のように、そのサブクエリに参加できます。
update n1 set
isvalid = 0
from
ncaastats n1
inner join (
SELECT
FirstName, LastName, NCAAStats.AccountId, College_Translator.school_name, StatTypeId, COUNT(*) AS 'Count'
FROM NCAAstats
INNER JOIN College_Translator
ON College_Translator.AccountID = NCAAstats.AccountId
GROUP BY FirstName, LastName, NCAAStats.AccountId, College_Translator.school_name, CalendarYear, StatTypeId
HAVING COUNT(*) >1
) n2 on
n1.accountid = n2.accountid
SQL Serverは、次のような更新を実行できます。
UPDATE table SET col=vaue
FROM (
SELECT ......
)
最初にここを見る必要があります:
http://msdn.Microsoft.com/en-us/library/aa260662(v = sql.80).aspx
上記は良い提案です....これを行う別の簡単な方法があります:
update ncaastats set isvalid = 0
where accountId in (
SELECT AccountId
FROM NCAAstats
INNER JOIN College_Translator
ON College_Translator.AccountID = NCAAstats.AccountId
GROUP BY FirstName, LastName, NCAAStats.AccountId, College_Translator.school_name, CalendarYear, StatTypeId
HAVING COUNT(*) >1
)
**列の名前をめちゃくちゃにした場合は許してください、しかしあなたはその考えを理解します。
CTEを使用し、基本的に自己結合とは何かを実行します
;with NCAAstatsToUpdate(
SELECT AccountId
FROM NCAAstats n
INNER JOIN College_Translator ct
ON ct.AccountID = n.AccountId
GROUP BY FirstName, LastName, n.AccountId, ct.school_name,
CalendarYear, StatTypeId
HAVING COUNT(*) >1 )
UPDATE NCAAstats
SET IsValid=0
FROM NCAAstats n
inner join NCAAstatsToUpdate u
on n.AccountId = u.AccountId
またはさらに良いことに、ウィンドウ関数を使用します。
;with NCStats as(
Select distinct row_number() over (partition by FirstName, LastName, n.AccountId, ct.school_name,
CalendarYear, StatTypeId order by n.accountId) rw, n.*
FROM NCAAstats n
INNER JOIN College_Translator ct
ON ct.AccountID = n.AccountId
)
Update NCStats
Set IsValid=0
Where rw>1
Secondは、「最初の」レコードを無効に更新せず、NCAAstatsとCollege_Translatorの間に1対1の関係があることを前提としていることに注意してください。