感觉这问题顶有意思,也符合一般常规的业务逻辑要求,解决这样的问题不是难事,参考解决方法:
--经营类型表
CREATE TABLE 经营类型(经营类型ID int IDENTITY(1,1),单位名称 nvarchar(20))
--市场表
CREATE TABLE 市场(市场ID int IDENTITY(1,1),市场名称 nvarchar(20))
--商户表
CREATE TABLE 商户(商户ID int IDENTITY(1,1),商户名称 nvarchar(20))
--商户经营类型表
CREATE TABLE 商户经营类型(商户ID int,经营类型ID int)
--各个市场摊位分布表
CREATE TABLE 市场摊位分布(分布ID int IDENTITY(1,1), 市场ID int ,经营类型ID int,商户ID int)
--插入测试数据
INSERT INTO 经营类型
SELECT (N'卖食品') UNION ALL
SELECT (N'儿童用品') UNION ALL
SELECT (N'日常用品') UNION ALL
SELECT (N'纺织品') UNION ALL
SELECT (N'五金产品')
INSERT INTO 市场
SELECT (N'A') UNION ALL
SELECT (N'B') UNION ALL
SELECT (N'C') UNION ALL
SELECT (N'D')
INSERT INTO 商户
SELECT (N'商户1') UNION ALL
SELECT (N'商户2') UNION ALL
SELECT (N'商户3')
INSERT INTO 商户经营类型
SELECT 1,2 UNION ALL
SELECT 1,1 UNION ALL
SELECT 1,3 UNION ALL
SELECT 2,2 UNION ALL
SELECT 2,3 UNION ALL
SELECT 2,1 UNION ALL
SELECT 3,4 UNION ALL
SELECT 3,2
INSERT INTO 市场摊位分布 (市场ID,经营类型ID)
SELECT 1,2 UNION ALL
SELECT 1,3 UNION ALL
SELECT 1,4 UNION ALL
SELECT 1,1 UNION ALL
SELECT 2,2 UNION ALL
SELECT 2,3 UNION ALL
SELECT 3,1 UNION ALL
SELECT 3,2 UNION ALL
SELECT 3,4
--测试Update过程
WHILE EXISTS(SELECT 1 FROM 市场摊位分布 WHERE 商户ID IS NULL)
BEGIN
UPDATE A SET A.商户ID=
--(SELECT )随机找出与本市场经营类型相同的商户ID
(SELECT TOP 1 商户ID FROM 商户经营类型 AS B1
WHERE NOT EXISTS(SELECT 1 FROM 市场摊位分布 AS B2 WHERE B2.经营类型ID=A.经营类型ID AND B2.商户ID=B1.商户ID)
ORDER BY NEWID()
)
FROM 市场摊位分布 AS A WHERE A.商户ID IS NULL
AND NOT EXISTS(SELECT 1 FROM 市场摊位分布 AS B WHERE B.商户ID IS NULL AND B.分布ID<A.分布ID )
END
--显示结果
SELECT * FROM 市场摊位分布 AS A
INNER JOIN 商户 AS B ON B.商户ID=A.商户ID
INNER JOIN 经营类型 AS C ON C.经营类型ID=A.经营类型ID
INNER JOIN 市场 AS D ON D.市场ID=A.市场ID
ORDER BY A.市场ID
--删除测试表
DROP TABLE 经营类型
DROP TABLE 市场
DROP TABLE 市场摊位分布
DROP TABLE 商户
DROP TABLE 商户经营类型
CREATE TABLE 经营类型(经营类型ID int IDENTITY(1,1),单位名称 nvarchar(20))
--市场表
CREATE TABLE 市场(市场ID int IDENTITY(1,1),市场名称 nvarchar(20))
--商户表
CREATE TABLE 商户(商户ID int IDENTITY(1,1),商户名称 nvarchar(20))
--商户经营类型表
CREATE TABLE 商户经营类型(商户ID int,经营类型ID int)
--各个市场摊位分布表
CREATE TABLE 市场摊位分布(分布ID int IDENTITY(1,1), 市场ID int ,经营类型ID int,商户ID int)
--插入测试数据
INSERT INTO 经营类型
SELECT (N'卖食品') UNION ALL
SELECT (N'儿童用品') UNION ALL
SELECT (N'日常用品') UNION ALL
SELECT (N'纺织品') UNION ALL
SELECT (N'五金产品')
INSERT INTO 市场
SELECT (N'A') UNION ALL
SELECT (N'B') UNION ALL
SELECT (N'C') UNION ALL
SELECT (N'D')
INSERT INTO 商户
SELECT (N'商户1') UNION ALL
SELECT (N'商户2') UNION ALL
SELECT (N'商户3')
INSERT INTO 商户经营类型
SELECT 1,2 UNION ALL
SELECT 1,1 UNION ALL
SELECT 1,3 UNION ALL
SELECT 2,2 UNION ALL
SELECT 2,3 UNION ALL
SELECT 2,1 UNION ALL
SELECT 3,4 UNION ALL
SELECT 3,2
INSERT INTO 市场摊位分布 (市场ID,经营类型ID)
SELECT 1,2 UNION ALL
SELECT 1,3 UNION ALL
SELECT 1,4 UNION ALL
SELECT 1,1 UNION ALL
SELECT 2,2 UNION ALL
SELECT 2,3 UNION ALL
SELECT 3,1 UNION ALL
SELECT 3,2 UNION ALL
SELECT 3,4
--测试Update过程
WHILE EXISTS(SELECT 1 FROM 市场摊位分布 WHERE 商户ID IS NULL)
BEGIN
UPDATE A SET A.商户ID=
--(SELECT )随机找出与本市场经营类型相同的商户ID
(SELECT TOP 1 商户ID FROM 商户经营类型 AS B1
WHERE NOT EXISTS(SELECT 1 FROM 市场摊位分布 AS B2 WHERE B2.经营类型ID=A.经营类型ID AND B2.商户ID=B1.商户ID)
ORDER BY NEWID()
)
FROM 市场摊位分布 AS A WHERE A.商户ID IS NULL
AND NOT EXISTS(SELECT 1 FROM 市场摊位分布 AS B WHERE B.商户ID IS NULL AND B.分布ID<A.分布ID )
END
--显示结果
SELECT * FROM 市场摊位分布 AS A
INNER JOIN 商户 AS B ON B.商户ID=A.商户ID
INNER JOIN 经营类型 AS C ON C.经营类型ID=A.经营类型ID
INNER JOIN 市场 AS D ON D.市场ID=A.市场ID
ORDER BY A.市场ID
--删除测试表
DROP TABLE 经营类型
DROP TABLE 市场
DROP TABLE 市场摊位分布
DROP TABLE 商户
DROP TABLE 商户经营类型