1

我需要为我的公司制作邮寄标签,我想我会为此做一个查询:

我有 2 张桌子 - tblAddress, tblContact.

tblContact我有“ addressNum”这是地址的外键和“ labelsNum”列,表示地址应出现在标签表中的次数。

我需要创建tblcontactand tbladdressby的内部连接addressNum,但如果labelsNum存在不止一次,它应该按原样显示多次labelsNum

4

2 回答 2

0

脚本不会为不同的联系人返回多行吗?

CREATE TABLE tblAddress ( 
  AddressID int IDENTITY
  , [Address] nvarchar(35)
);

CREATE TABLE tblContact ( 
  ContactID int IDENTITY
  , Contact nvarchar(35)
  , AddressNum int
  , labelsNum int
);

INSERT INTO tblAddress VALUES ('foo1');
INSERT INTO tblAddress VALUES ('foo2');

INSERT INTO tblContact VALUES ('bar1', 1, 1);
INSERT INTO tblContact VALUES ('bar2', 2, 2);
INSERT INTO tblContact VALUES ('bar3', 2, 2);

SELECT * FROM tblAddress a JOIN tblContact c ON a.AddressID = c.AddressNum

这在我的末端产生了 3 行。labelsNum 列对我来说似乎是多余的。如果为地址 foo2 添加第三个联系人,则必须更新所有引用 foo2 的记录的所有 labelsNum 列,以保持一致。

标签的数量已经由不同联系人的数量决定。

还是我错过了什么?

于 2012-10-10T10:10:38.270 回答
0

我建议使用递归查询为每一行进行正确的迭代次数。

这是代码(+ SQL fiddle的链接):

;WITH recurs AS (
  SELECT *, 1 AS LEVEL
  FROM tblContact
  UNION ALL
  SELECT t1.*, LEVEL + 1
  FROM tblContact t1
  INNER JOIN
  recurs t2
  ON t1.addressnum = t2.addressnum
  AND t2.labelsnum > t2.LEVEL
 )

SELECT *
FROM recurs
ORDER BY addressnum
于 2012-10-10T10:12:20.203 回答