0

次の例の操作方法を理解する必要があります。

次の 2 つのテーブルがあるとします。

    **Table Name: Children**
Child    Shirt_Color_ID    Parent
Bob           1             Kate
Kate          2             Jack
Jack          3             Jill
.             .              .
.             .              .

    **Table Name: Shirt_Colors**
Shirt_Color_ID    Shirt_Color 
      1              Red
      2              Blue
      3              White

そして、次のテーブルを返したい:

Child   Child_Shirt_Color    Parent     Parent_Shirt_Color
Bob           Red             Kate           Blue

Parent_Shirt_Color を取得するにはどうすればよいですか? Child、Child_Shirt_Color、Parentを表示する方法を取得しました:

select 
  Children.Child, 
  Shirt_Colors.Shirt_Color,
  Children.Parent
from
  Children,
  Shirt_Colors
where
  Shirt_Colors.Shirt_Color_ID = Children.Shirt_Color_ID and
  Children.Child =  'Bob';

これについて私が調べた他の例では、「WITH」の使用について話しましたが、サポートされていないと言うたびにエラーが発生します。また、私は親と子の間に非常に長い関係があるため、リスト全体を返してほしくありません - 2-3 世代だけです。

オラクルの使用

どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

0

CTE が必要で、再帰クエリに使用しました。 http://technet.microsoft.com/en-us/library/ms186243(v=sql.105).aspx

次のコードを試してください:

DROP TABLE Children
DROP TABLE Shirt_Colors

CREATE TABLE  Children(
    Child varchar(20),
    Shirt_Color_ID int,
    Parent varchar(20)
)

CREATE TABLE Shirt_Colors
(
    Shirt_Color_ID int,
    Shirt_Color varchar(20)
) 

INSERT INTO Shirt_Colors (Shirt_Color_ID, Shirt_Color)
VALUES  (1, 'Red'),
        (2, 'Blue'),
        (3, 'White'),
        (4, 'Yellow')
INSERT INTO Children (Child, Shirt_Color_ID, Parent)
VALUES  ('Bob', 1, 'Kate'),
        ('Kate', 2, 'Jack'),
        ('Jack', 3, 'Jill'),    
        ('Jill', 4, NULL)   

select * from Children
;       
WITH CTE (Child, Shirt_Color, Parent)
AS
(
    SELECT  
        C.Child, 
        SC.Shirt_Color,
        C.Parent
    FROM Children C
    INNER JOIN Shirt_Colors SC
    ON C.Shirt_Color_ID = SC.Shirt_Color_ID
    WHERE C.Parent IS NULL

    UNION ALL

    SELECT 
        C.Child,
        SC.Shirt_Color,
        C.Parent
    FROM CTE
    INNER JOIN Children C
    ON CTE.Child = C.Parent
    INNER JOIN Shirt_Colors SC
    ON C.Shirt_Color_ID = SC.Shirt_Color_ID
)   
SELECT 
    Child,
    Shirt_Color,
    Parent
FROM CTE
于 2013-08-22T12:31:05.640 に答える