1

私は3つのテーブルを持っています:

organiz: pk = org_id
individu: pk = ind_id
address: pk = address_id

と の両方organizindividuが含まれていaddress_idます。の各行にindividuorg_id. 基本的に「個人」は「組織」に属します。特定address_idorg_id.

これは私が以前に試したことaddress_idです。

select
    a.Address_id,
    a.Address_Line_1,
    a.Address_Line_2,
    a.Address_City,
    a.Address_State_Code,
    a.Address_Zip,
    o.Phone_Number

from
    address a inner join individu i on a.address_id = i.address_id
    inner join organiz o on o.org_id = i.org_id
where
    a.Address_Line_1 is not null
    and o.org_id = 808474

それを機能させるために、ユニオンを使用して、組織の住所 ID を照会しました。

select
    a.Address_id,
    a.Address_Line_1,
    a.Address_Line_2,
    a.Address_City,
    a.Address_State_Code,
    a.Address_Zip,
    o.Phone_Number

from
    address a inner join individu i on a.address_id = i.address_id
    inner join organiz o on o.org_id = i.org_id
where
    a.Address_Line_1 is not null
    and o.org_id = 808474
UNION
select
    a.Address_id,
    a.Address_Line_1,
    a.Address_Line_2,
    a.Address_City,
    a.Address_State_Code,
    a.Address_Zip,
    o.Phone_Number
from 
    address a inner join organiz o on a.address_id = o.address_id
where
    o.org_id = 808474
    and a.Address_Line_1 is not null

UNION の使用を避けることができる別の方法はありますか?

4

2 に答える 2

0

ええ、できます。

Select StuffYouWant 
From Address 
WHERE EXISTS (SELECT * 
                FROM organiz 
                WHERE Address.address_id = organiz.address_id 
                    AND SEARCH_CRITERIA) 
    OR EXISTS (SELECT * 
                FROM individu
                WHERE Address.address_id = individu.address_id 
                AND SEARCH_CRITERIA)
于 2012-05-18T15:09:32.057 に答える
0

UNIONを内部クエリにプッシュできます。

SELECT  a.*
FROM    address
WHERE   id IN
        (
        SELECT  ad.address_id
        FROM    organiz o
        CROSS APPLY
                (
                SELECT  address_id
                UNION ALL
                SELECT  i.address_id
                FROM    individu i
                WHERE   i.org_id = o.org_id
                ) ad
        WHERE   o.org_id = @myorgid
        )
于 2012-05-18T15:11:20.630 に答える