2012-07-12 70 views
-1

我有4條記錄(在家中,辦公室,度假,酒店)和共享提起addresstypeid表地址表AddressTypes。SQL交叉聯接空值

在地址表中我有型「家」的1條,我想查詢從哪裏獲得4行是這樣的:

Type  Address1 Address2 City State 

home  piping 1232  Austin Tx 
office null  null  null null 
vacation null  null  null null 
hotel null  null  null null 

下面是表的圖像:http://tinypic.com/view.php?pic=28078xv&s=6

我敢肯定是非常容易的,也許使用交叉連接但不知道它。希望有人能指導我。提前欣賞。

+0

我不明白你的問題,你能展示你想要產生這個結果的兩個表的樣本。 – automatic 2012-07-12 22:57:09

+1

你可能想編輯你的標題,所以它不建議一個可能不正確的解決方案(交叉連接可能不是答案)。 – automatic 2012-07-12 22:58:56

+0

下面是表http://tinypic.com/view.php?pic=28078xv&s=6 – VAAA 2012-07-12 23:06:25

回答

1

Left joining AdddressTypes到的地址,將會產生期望的結果:

select at.Type, 
     a.Address1, 
     a.Address2, 
     a.City, 
     a.State 
    from AddressTypes at 
    left join Address a 
    on at.AddressTypeID = a.AddressTypeID 
-- For this query to make sense 
-- Filter one person only 
    and a.PersonID = @PersonID 

-----------這部分下,加入由VAAA ------------- -----------

尼古拉,我改成這樣:

select at.description, 
     a.Address1, 
     a.Address2, 
     a.City 
    from address_types at 
    left join Address a 
    on 1 = 1 
-- For this query to make sense 
-- Filter one person only 
    and a.addressid = 24 

然後我得到的4行,但它們都具有相同的地址信息,並僅作爲「家庭「類型的地址是具有數據的地址。因此,它的關閉...

+0

尼古拉將只輸出1行。剛剛嘗試過。這裏是表模式。 http://tinypic.com/view.php?pic=28078xv&s=6 – VAAA 2012-07-12 23:07:34

+0

@VAAA我的錯誤 - 我在右表放置了一個過濾器。請檢查更新後的答案(更改爲和)。 – 2012-07-12 23:11:25

+0

尼古拉,我沒有看到更新的答案..只是我的編輯:)也許我編輯當你更新:) – VAAA 2012-07-12 23:13:10

0

使用LEFT OUTER JOIN,這從兩個表的左和右表和不匹配的記錄都返回匹配的記錄副本。這裏是我試過的測試代碼:

CREATE TABLE AddressTypes(
    AddressType SMALLINT NOT NULL, 
    [Description] NVARCHAR(50)) 

ALTER TABLE AddressTypes 
ADD CONSTRAINT PK_AddressTypes_AddressType 
    PRIMARY KEY (AddressType) 


CREATE TABLE [Address] (
    AddressID INT NOT NULL, 
    AddressType SMALLINT, 
    Address1 NVARCHAR(50), 
    Address2 NVARCHAR(50), 
    City NVARCHAR(50), 
    State CHAR(2)) 

ALTER TABLE [Address] 
ADD CONSTRAINT PK_Address_AddressID 
    PRIMARY KEY (AddressID) 

ALTER TABLE [Address] 
ADD CONSTRAINT FK_address_addresstypes_addresstype 
    FOREIGN KEY (AddressType) REFERENCES AddressTypes(AddressType) 


INSERT INTO AddressTypes VALUES (1, 'home'), (2, 'office'), 
           (3, 'vacation'), (4, 'hotel') 
INSERT INTO address VALUES (1, 1, 'piping', '1232', 'Austin', 'TX') 

    -- Here is the query that outputs the result set. 
    SELECT AT.AddressType AS [Type], A.Address1, A.Address2, A.City, A.State 
    FROM AddressTypes AT 
    LEFT OUTER JOIN address A 
    ON AT.AddressType = A.AddressType