如何在SQL中检索别名项和/或项

时间:2011-05-23 19:57:40

标签: sql sql-server

我在SQL Server 2008中有一个项目表,其设置如下:

ITEMS TABLE

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

我还有一个表来存储这些项目的别名:

ALIASES TABLE

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

我正在尝试生成一个查询,以便我可以检索项目列表,但我遇到问题,因为我似乎只能得到任何项目或别名而不是两者(我遇到的问题是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'

我已将数据放入问题中,但似乎已将其重新格式化。这是SQL 2008中的完整数据。

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')

1 个答案:

答案 0 :(得分: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