首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2000 實用資料庫應用技巧:刪除重複、技能查詢與表格合併

     編輯:關於SqlServer

技巧一:刪除資料表中重複資料列

情境

資料表 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 包含所有欄位,資料為兩表之和。

解決方案:分步 INSERT 法

-- 先建立表 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 填補。

延伸應用建議

  • SQL Server 環境可使用 UNION ALL 搭配 SELECT ... NULL AS missing_col 單一陳述式完成
  • 大量資料建議使用 BULK INSERT 或 SSIS 套件
  • 合併前務必備份原始資料
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved