我想你可以从这样的事情开始。 最后,在检查完成之后(无论如何在更新之前备份你的表),你可以删除tableA中的CATEGORY列和(如果你想)重命名列CATEGORY_ID。 如果你想,在开始之前,你可以做供以后使用的检查(见最后):
SELECT CATEGORY, COUNT(*) AS RC
FROM TABLEA
GROUP BY CATEGORY;
示例脚本
CREATE TABLE TABLEA (ID INT, CATEGORY VARCHAR(20), DATE_A DATETIME);
CREATE TABLE TABLEB (ID INT, CATEGORY VARCHAR(20));
INSERT INTO TABLEA VALUES (1,'abc', GETDATE());
INSERT INTO TABLEA VALUES (2,'cde', GETDATE());
INSERT INTO TABLEA VALUES (3,'cde', GETDATE());
INSERT INTO TABLEA VALUES (4,'abc', GETDATE());
INSERT INTO TABLEA VALUES (5,'abc', GETDATE());
INSERT INTO TABLEA VALUES (6,'fgh', GETDATE());
INSERT INTO TABLEA VALUES (7,'zzz', GETDATE());
INSERT INTO TABLEB VALUES (100,'abc');
INSERT INTO TABLEB VALUES (200,'cde');
INSERT INTO TABLEB VALUES (300,'fgh');
SELECT * FROM TABLEA;
ALTER TABLE TABLEA ADD CATEGORY_ID INT;
UPDATE A SET CATEGORY_ID = B.ID
FROM TABLEA A
LEFT JOIN TABLEB B ON A.CATEGORY = B.CATEGORY;
--CREATE INDEX TABLEA_CATID ON TABLEA (CATEGORY_ID);
SELECT CATEGORY_ID, COUNT(*) AS RC
FROM TABLEA
GROUP BY CATEGORY_ID;
对于semplicity,我没加PK (但如你所知他们是“必要的”)。 我建议为CATEGORY_ID在TABLEA上定义FK约束。
您确定该列只有数字数据吗?如果你能容忍它,只要在查询时解决这个问题可能是一个选择。 –
你使用的是MySQL还是MS SQL Server?不要标记不涉及的产品。 – jarlh
@jarlh Microsoft SQL Server,错误的标签我的坏。 –