2011-05-23 46 views
0

走樣的項目和/或項目我有一個項目表中的SQL Server 2008這是設置如下:我如何檢索SQL

項表

itemId (PK) | Ref 
1   | item1 
2   | item2 

我也有一個表這些物品的商店別名:

別名表

aliasId(PK) | objectId(FK) | AliasOfId(FK) | Ref 
10   | 50   | 1    | A1 
20   | 51   | 2    | A2 
30   | 52   | 2    | A3 

我試圖生成查詢,以使我的CA ñ檢索項目列表,但我有問題,我似乎只能得到任何項目或別名不是兩個(問題我有LEFT JOIN總是加入別名。

使用的SQL如下所示。任何想法,感謝任何幫助?

SELECT 
     ISNULL(A.objectId,I.itemId) AS itemId 
    ,ISNULL(A.ref,I.ref) AS ref 
    ,isAlias = CASE WHEN A.aliasID IS NULL THEN 1 ELSE 0 END 

FROM  items I 
LEFT JOIN aliases A ON (I.itemId = A.AliasOfId) 
WHERE  
     ISNULL(A.objectId,I.itemId) = 1 
    OR ISNULL(A.objectId,I.itemId) = 51 
    OR ISNULL(A.ref,I.ref) = 'A3' 

我已經把數據與問題,但它似乎已經重新格式化它。下面是2008年的SQL

CREATE TABLE [items] 
([itemId] [int] NOT NULL 
, [ref] [varchar](50) NOT NULL) 
ON [PRIMARY] 

CREATE TABLE [aliases] 
([aliasId] [int] NOT NULL 
, [objectId] [int] NOT NULL 
, [aliasOfId] [int] NOT NULL 
, [ref] [varchar](50) NOT NULL) 
ON [PRIMARY] 

INSERT INTO [items] ([itemId],[ref]) 
VALUES (1, 'Item1'),(2, 'Item2') 

INSERT INTO [aliases] ([aliasId],[objectId],[aliasOfId],[ref]) 
VALUES 
(10, 50, 1, 'A1') 
,(20, 51, 2, 'A2') 
,(30, 52, 2, 'A3') 
+0

我建議你的設計是沒有意義的,應該改變,因爲它決不會輕易或有效的查詢完整的數據。這種想法毫無意義,我甚至無法弄清楚你想要完成什麼來提出更好的設計。建議您在嘗試設計更好的結構之前首先閱讀關於數據庫規範化的內容。 – HLGEM 2011-05-23 20:23:45

+0

感謝您的回覆,並且我完全瞭解數據庫正常化。也許我沒有把情況弄清楚。 我試圖實現一個相當常見的數據庫情況,項目表包含文件夾,並且別名表給出指向文件夾的元素(即文件夾的快捷方式)的新ID。 這是否使它更清晰? – Puc 2011-05-23 20:29:22

+0

嘗試給我們提供一些示例數據 – HLGEM 2011-05-23 20:30:47

回答

1
SELECT 
     Ref   AS item 
     ItemId 
     Ref 
     1   AS isAlias 
    FROM 
     items i 
UNION ALL 
    SELECT 
     i.Ref  AS item 
     a.objectID AS itemId 
     a.Ref  AS ref 
     0   AS isAlias 
    FROM 
     items i 
     JOIN 
     aliases a 
      ON i.itemId = a.AliasOfId 
+0

爲什麼我不這麼想!非常感謝。 – Puc 2011-05-23 20:51:21