我需要出示邮寄标签为我的公司,我想我会做一个查询为:SQL - 选择选择行多次
我有2个表 - tblAddress
,tblContact
。
tblContact
我有地址的外键“addressNum
”和表示地址出现在标签表中的次数的“labelsNum
”列。
我需要建立由addressNum
, 内连接的tblcontact
和tbladdress
但如果labelsNum
多次存在为labelsNum
是它应显示为许多倍。
我需要出示邮寄标签为我的公司,我想我会做一个查询为:SQL - 选择选择行多次
我有2个表 - tblAddress
,tblContact
。
tblContact
我有地址的外键“addressNum
”和表示地址出现在标签表中的次数的“labelsNum
”列。
我需要建立由addressNum
, 内连接的tblcontact
和tbladdress
但如果labelsNum
多次存在为labelsNum
是它应显示为许多倍。
我建议使用递归查询为每一行进行正确的迭代次数。
下面是代码(+链接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
谢谢!它效果很好 – netanelyo
不会为不同的联系人返回多行吗?
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列,以保持事物一致。
标签的数量已经由不同的联系人数量决定。
或者我错过了什么?
哪些DBMS您使用的? – RichardTheKiwi
向我们展示表格。注意:不要将你的表命名为tblThing。你会给你的孩子命名为“childBoy”还是“ChildGirl”? – wildplasser