0

4つのレコード(自宅、オフィス、休暇、ホテル)を持つテーブルAddressTypesと、ファイルされたaddresstypeidを共有するテーブルAddressがあります。

アドレステーブルに「home」タイプのレコードが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

おそらくクロスジョインを使用すると非常に簡単なことですが、取得しないでください。誰かが私を導いてくれることを願っています。事前に感謝します。

4

2 に答える 2

2

AddressTypes を Addresses に左結合すると、望ましい結果が得られます。

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行を取得しますが、それらはすべて同じアドレス情報を持ち、「ホーム」タイプのアドレスだけがデータを持つものです。だから近い...

于 2012-07-12T22:58:26.303 に答える
0

LEFT OUTER JOIN を使用します。これは、左右のテーブルの両方から一致するレコードと、両方のテーブルから一致しないレコードの 1 つのコピーを返します。私が試したテストコードは次のとおりです。

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
于 2012-07-12T23:40:16.780 に答える