我需要出示郵寄標籤爲我的公司,我想我會做一個查詢爲: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