我正在處理訪問查詢,但有點走入了死胡同。我想洗掉表中所有重復的行,這些行在 Brand、SerialNr、Seats 和 LastRepair 列中具有相同的值,在年份列中具有值“2013”??。
我試圖洗掉所有在這些列和 2013 年有重復的行,所以沒有留下一個。(不僅洗掉重復的所以只剩下一個,而且洗掉所有實體所以沒有剩下)
原始表如下所示:
| 牌 | 序號 | 座位 | 顏色 | 最后修復 | 年 |
|---|---|---|---|---|---|
| 福特 | 145 | 4個 | 藍色的 | 01.01.2020 | 2010 |
| 福特 | 145 | 4個 | 紅色的 | 01.01.2020 | 2010 |
| 福特 | 145 | 4個 | 紅色的 | 01.01.2020 | 2013 |
| 福特 | 145 | 4個 | 綠色的 | 01.01.2020 | 2013 |
| 保時捷 | 146 | 2個 | 白色的 | 01.01.2022 | 2013 |
| 法拉利 | 146 | 2個 | 白色的 | 01.01.2022 | 2013 |
| 大眾汽車 | 147 | 4個 | 藍色的 | 01.01.2021 | 2017年 |
| 大眾汽車 | 147 | 4個 | 紅色的 | 01.01.2021 | 2013 |
| 大眾汽車 | 147 | 4個 | 橙子 | 01.01.2021 | 2013 |
結果表應如下所示:
| 牌 | 序號 | 座位 | 顏色 | 最后修復 | 年 |
|---|---|---|---|---|---|
| 福特 | 145 | 4個 | 藍色的 | 01.01.2020 | 2010 |
| 福特 | 145 | 4個 | 紅色的 | 01.01.2020 | 2010 |
| 保時捷 | 146 | 2個 | 白色的 | 01.01.2022 | 2013 |
| 法拉利 | 146 | 2個 | 白色的 | 01.01.2022 | 2013 |
| 大眾汽車 | 147 | 4個 | 藍色的 | 01.01.2021 | 2017年 |
我試著用這個問題來做,但如果這些列中有重復的值,我需要洗掉這些行,這樣就沒有一個人有同一年了。
我還嘗試執行“查找重復項”查詢并進行外部連接,但到目前為止沒有成功達到預期的結果。我感謝任何幫助。
DELETE Exists (SELECT 1
FROM carTable As t2
WHERE t1.Brand = t2.Brand AND t1.SerialNr = t2.SerialNr AND t1.Seats = t2.Seats AND t1.LastRepair = t2.LastRepair
HAVING Count(*) > 1
), t1.[FilNr], *
FROM carTable AS t1, carTable
WHERE (((Exists (SELECT 1
FROM carTable As t2
WHERE t1.Brand = t2.Brand AND t1.SerialNr = t2.SerialNr AND t1.Seats = t2.Seats AND t1.LastRepair = t2.LastRepair
HAVING Count(*) > 1
))<>False) AND ((t1.[year])=2013));
uj5u.com熱心網友回復:
您可以使用EXISTS子查詢來識別重復的行并洗掉它們。
在子查詢中,我們只是根據要識別重復項的列進行選擇,然后檢查計數是否大于 1(因為Count是聚合,所以它在HAVING子句中)。
DELETE * FROM t AS t1
WHERE EXISTS(
SELECT 1
FROM t As t2
WHERE t1.Brand = t2.Brand AND t1.SerialNr = t2.SerialNr AND t1.Seats = t2.Seats AND t1.LastRepair = t2.LastRepair
HAVING Count(*) > 1
)
AND Year = 2013
uj5u.com熱心網友回復:
如果您的目標是永遠不要在“品牌”列中包含重復資訊,則可以在表格設計本身中實作。設定表格以限制用戶在某些情況下可以輸入的內容會更有效。有幾種方法可以做到這一點。您可以將主鍵設定為品牌列,或者將該列的“索引”屬性更改為“是(無重復)”如果您使用自動編號作為 ID 欄位并計劃通過該 ID 關聯表,那么索引是您最好的選擇。

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/535580.html
標籤:数据库ms-access
