【发布时间】:2018-05-23 13:01:46
【问题描述】:
我有一个如下所示的表 A-
Column1 Column2
0001M 80050
0001M 80053
0001M 80076
0001T 0002T
0001T 34800
0001T 34802
0001T 34804
0001T 36000
0001U 80500
0001U 80502
0001U 81105
0001U 81106
CREATE TABLE mytable(
Column1 VARCHAR(5) NOT NULL PRIMARY KEY
,Column2 VARCHAR(5) NOT NULL
);
INSERT INTO mytable(Column1,Column2) VALUES ('0001M','80050');
INSERT INTO mytable(Column1,Column2) VALUES ('0001M','80053');
INSERT INTO mytable(Column1,Column2) VALUES ('0001M','80076');
INSERT INTO mytable(Column1,Column2) VALUES ('0001T','0002T');
INSERT INTO mytable(Column1,Column2) VALUES ('0001T','34800');
INSERT INTO mytable(Column1,Column2) VALUES ('0001T','34802');
INSERT INTO mytable(Column1,Column2) VALUES ('0001T','34804');
INSERT INTO mytable(Column1,Column2) VALUES ('0001T','36000');
INSERT INTO mytable(Column1,Column2) VALUES ('0001U','80500');
INSERT INTO mytable(Column1,Column2) VALUES ('0001U','80502');
INSERT INTO mytable(Column1,Column2) VALUES ('0001U','81105');
INSERT INTO mytable(Column1,Column2) VALUES ('0001U','81106');
我有另一个表 B,其中包含以下列 -
ID SubID
1 0001M
1 80050
1 80053
1 12500
2 0001T
2 0002T
2 34800
2 36000
2 12506
3 80500
3 80502
3 81106
CREATE TABLE mytable(
ID INTEGER NOT NULL PRIMARY KEY
,SubID VARCHAR(5) NOT NULL
);
INSERT INTO mytable(ID,SubID) VALUES (1,'0001M');
INSERT INTO mytable(ID,SubID) VALUES (1,'80050');
INSERT INTO mytable(ID,SubID) VALUES (1,'80053');
INSERT INTO mytable(ID,SubID) VALUES (1,'12500');
INSERT INTO mytable(ID,SubID) VALUES (2,'0001T');
INSERT INTO mytable(ID,SubID) VALUES (2,'0002T');
INSERT INTO mytable(ID,SubID) VALUES (2,'34800');
INSERT INTO mytable(ID,SubID) VALUES (2,'36000');
INSERT INTO mytable(ID,SubID) VALUES (2,'12506');
INSERT INTO mytable(ID,SubID) VALUES (3,'80500');
INSERT INTO mytable(ID,SubID) VALUES (3,'80502');
INSERT INTO mytable(ID,SubID) VALUES (3,'81106');
tableA 的 column1 和 column2 的值不应同时出现在 tableB 的每个不同 ID 列的 SubID 列中。如果发生,我需要标记为1。否则为0。例如,(0001M,80050)和(0001M,80053)不允许同时出现。由于这两种组合存在于表 B 的 ID=1 中,因此应标记为 1。
输出应该是这样的 -
ID Flag
1 1
2 1
3 0
Reason Flag = 0 for ID=3 --> 由于 (80500, 80502) 和 (80502, 81106) 仅来自第 2 列(不能同时来自第 1 列和第 2 列),因此它们是允许的一起发生,它被标记为 0。我使用的是 SQL Server 2016 版本。
【问题讨论】:
-
小心,如果表B中有很多相同ID的行,查询会很慢
-
在什么基础上主键列允许表中的重复值?
-
您的
Primary Key设置不正确,每个表中相同的 Column1 / Id 的值重复 -
你昨天也问过这个问题吗?我很肯定有人这样做了,但问题似乎已被删除。
标签: sql sql-server