2012-10-10 79 views
1

我需要出示邮寄标签为我的公司,我想我会做一个查询为:SQL - 选择选择行多次

我有2个表 - tblAddresstblContact

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

我需要建立由addressNum, 内连接的tblcontacttbladdress但如果labelsNum多次存在为labelsNum是它应显示为许多倍。

+1

哪些DBMS您使用的? – RichardTheKiwi

+1

向我们展示表格。注意:不要将你的表命名为tblThing。你会给你的孩子命名为“childBoy”还是“ChildGirl”? – wildplasser

回答

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 
+0

谢谢!它效果很好 – netanelyo

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列,以保持事物一致。

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

或者我错过了什么?