1

次のようなサンプルデータを含むテーブル構造を次のようにしています名前:ユーザー

User   Region
Sam    USA    
Meyer  NA    
Ying   Japan    
Yang   Asia

地域と国を含む別のテーブルもあります

名前: 地域

       Region Country         RegionList    
        USA     America            
        NA       NULL          USA            
        NA      Canada            
        NA      Mexico            
        Japan   Japan
        Asia     NULL         Central        
        Asia      NULL         East        
        Central  India        
        East     Dubai
        Central  Japan

各ユーザーと、そのユーザーが代表する対応する国を一覧表示する SQL サーバー クエリをどのように作成しますか?

お気に入り:

Sam   America
Meyer America
Meyer Canda
Meyer Mexico
Ying  Japan
Yang  Japan
Yang  India
Yang  Dubai
4

3 に答える 3

5

リージョンテーブルが潜在的に無限に多くのレベルの深さである場合は、共通テーブル式を使用できます。一般的なテーブル式を使用した再帰クエリを参照してください。

WITH UserRegions (username, region, country)
AS
(
    -- Anchor member definition
    SELECT u.[user] AS username, r.regionlist AS region, r.country
    FROM [User] u
    JOIN Region r
        ON u.Region = r.Region
    UNION ALL
    -- Recursive member definition
    SELECT ur.username, r.regionlist AS region, r.country
    FROM Region r
    INNER JOIN UserRegions AS ur
        ON r.Region = ur.Region
)
-- Statement that executes the CTE
SELECT username, country
FROM UserRegions
WHERE country IS NOT NULL
ORDER BY username

http://sqlfiddle.com/#!3/ca9de/8

于 2013-03-08T21:06:36.963 に答える
0

JOIN を使用して、目的の結果を得ることができます

SELECT user, isNull(Country,RegionList) Country
FROM user
    JOIN region ON users.region = region.region
ORDER BY user, Country

国がない場合でもすべてのユーザーを返したい場合は、LEFT OUTER JOIN を使用できます。

SELECT user, isNull(isNull(Country,RegionList),'No countries') Country
FROM user
    LEFT OUTER JOIN region ON users.region = region.region
ORDER BY user, Country
于 2013-03-08T20:59:07.787 に答える
-1

あなたが提供した明示的なスキーマとサンプルデータに基づいて:

select
user, isnull(region.country, r2.country) as Country 
from 
user
left join 
region 
on user.region = region.region
left join
region r2
on r2.region = region.regionlist
于 2013-03-08T21:00:50.327 に答える