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

標籤的數量已經由不同的聯繫人數量決定。

或者我錯過了什麼?