我想知道如何更新重復它們的列的值。
例子我有這個
| A欄 | B欄 | C欄 | 重復? |
|---|---|---|---|
| 名稱 | 111 | 1234 | 不 |
| 南美 | 222 | 5678 | 不 |
| 名稱B | 222 | 5678 | 不 |
我需要將列(重復?)更改為 YES WHERE ColumnB 和 ColumnC 是這樣的:
| A欄 | B欄 | C欄 | 重復? |
|---|---|---|---|
| 名稱 | 111 | 1234 | 不 |
| 南美 | 222 | 5678 | 是的 |
| 名稱B | 222 | 5678 | 是的 |
我試過了
UPDATE [MY_TABLE]
SET [Repeated?] = 'Yes'
FROM [MY_TABLE] as A
INNER JOIN
(
SELECT ColumnA, ColumnC
FROM [MY_TABLE]
GROUP BY ColumnA, ColumnC
) as B
ON B.ColumnC = A.ColumnC, B.ColumnA = B.ColumnA
但這沒有用。有人可以幫忙嗎?
uj5u.com熱心網友回復:
您的解決方案實際上比您接受的解決方案更好(一旦您糾正了錯誤)。因為 anINNER JOIN意味著除了需要更改為“是”的行之外,您不會更新任何行,而您接受的答案會不必要地更新表中的所有行。你遇到的問題是
AND您使用not組合連接條件,。- 您的第二個連接條件是將同一列與其自身進行比較。
- 您的第二個連接條件應該是 ColumnB 而不是 ColumnA
- 您不需要子查詢即可將表連接回自身。
- 但最重要的是,您沒有添加條件來阻止行加入自身。
UPDATE A
SET [Repeated?] = 'Yes'
FROM [MY_TABLE] AS A
INNER JOIN [MY_TABLE] AS B
ON B.ColumnC = A.ColumnC
AND B.ColumnB = A.ColumnB
-- The next condition prevents a row matching itself
AND B.ColumnA <> A.ColumnA;
筆記:
- 使用別名而不是表名更新表
FROM時。UPDATE - 最佳做法是不要使用需要您轉義它們的字符來命名列,例如
[Repeated?]只使用Repeated(或者我會使用IsRepeated)。 - 您最好在需要時查詢它,而不是每次更改表時都必須更新它。
uj5u.com熱心網友回復:
我認為這應該可以解決問題
UPDATE yt1
SET Repeated= (CASE WHEN yt2.ColumnA IS NULL THEN 'No' ELSE 'Yes' END)
FROM YourTable yt1
LEFT OUTER JOIN YourTable yt2
ON yt1.ColumnB = yt2.ColumnB AND yt1.ColumnC = yt2.ColumnC
WHERE yt1.ColumnA <> yt2.ColumnA
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/487008.html
