資料表 table1 含重複資料:
id name 1 aa 2 bb 3 cc 1 aa 2 bb 3 cc
目標保留唯一值:
id name 1 aa 2 bb 3 cc
SELECT DISTINCT id, name
INTO #t
FROM table1
DELETE table1
INSERT INTO table1
SELECT * FROM #t
關鍵提醒:SELECT DISTINCT 必須包含所有需要的欄位,否則未列出的欄位資料將遺失。
員工技能表:
ID 員工 技能 1 1 VB 2 1 PHP 3 1 ASP 4 2 PHP 5 3 ASP 6 4 VB 7 4 ASP
需找出同時會 VB 且 PHP 的員工(答案:員工 1)。
SELECT 員工 FROM [Table]
WHERE 員工 IN (SELECT 員工 FROM [Table] WHERE 技能='VB')
AND 技能='PHP'
邏輯:先找出會 VB 的員工清單,再從該清單中篩選技能為 PHP 的記錄。
兩張 Access 表格結構不同需合併:
| 欄位 | 表 A (900 筆) | 表 B (800 筆) |
|---|---|---|
| id | 自動編號 | 自動編號 |
| name | 文本 | 文本 |
| price | 數字 | 數字 |
| guige | 文本 | 無 |
| changjia | 文本 | 文本 |
| baozhuang | 文本 | 無 |
| danwei | 文本 | 文本 |
| xingzhi | 無 | 文本 |
目標建立新表 C 包含所有欄位,資料為兩表之和。
-- 先建立表 C 結構(含所有欄位)
-- 匯入表 A 資料
INSERT INTO c (id, name, price, guige, changjia, baozhuang, danwei, xingzhi)
SELECT id, name, price, guige, changjia, baozhuang, danwei, NULL FROM a
-- 匯入表 B 資料,id 重新編號避免衝突
INSERT INTO c (id, name, price, guige, changjia, baozhuang, danwei, xingzhi)
SELECT (SELECT MAX(id) FROM c) + ROW_NUMBER() OVER (ORDER BY id),
name, price, NULL, changjia, NULL, danwei, xingzhi FROM b
補充說明:原答案使用 max(id)+1 但僅適用單筆,大量資料建議使用 ROW_NUMBER() 或序列產生器確保 id 唯一。缺少的欄位以 NULL 填補。
UNION ALL 搭配 SELECT ... NULL AS missing_col 單一陳述式完成BULK INSERT 或 SSIS 套件