-1

そのため、既存の検索結果を調べてみましたが、まだ困惑しています。うまくいけば、誰かが助けてくれるでしょう。

A(3列)、B(2列)、C(2列)の3つのテーブルがあり、A1の列に基づいて列C1の値を取得する必要があります。

したがって、A1 の値が NULL の場合は「NONE」になり、単純に C2 の行と結合して C1 の値を取得します。

ただし、A1 の値が NOT NULL の場合、その値を B2 の行と一致させ、B1 の値を C2 と一致させると、C1 の値が得られます。

そのようなことを達成するにはどうすればよいですか。内部と左の結合があることは理解していますが、正しく出てこないだけです。

以下はサンプルデータです。

Table - A

+--------+----+----+
| A1     | A2 | A3 |
+--------+----+----+
| Cake   | 22 | X  |
| (null) | 20 | Y  |
| Butter | 30 | Z  |
+--------+----+----+

Table - B

+-----+--------+
| B1  | B2     |
+-----+--------+
| EAT | Cake   |
| USE | Oil    |
| PRO | Butter |
+-----+--------+

Table - C

+-----+--------+
| C1  | C2     |
+-----+--------+
| 100 | EAT    |
| 200 | USE    |
| 999 | NONE   |
| 300 | PRO    |
+-----+--------+

どんな助けでも大歓迎です。

4

2 に答える 2

2

クエリ:

SELECT * FROM 
(    SELECT a1,c1 FROM a,b,c 
            WHERE a.a1=b.b2 AND b.b1=c.c2 
     UNION
     SELECT b2,c1 FROM b JOIN c on b1=c2
) X 
UNION 
SELECT a1,c1 FROM a,c WHERE a1 IS NULL AND c2='NONE';

c1の値がごちゃごちゃしている可能性があり、これがそれを区別するため、a1とc1の両方を取得しています。特定の順序で c1 値が必要な場合は、そのクエリが少し難しいかもしれませんが、お知らせください。

于 2012-11-12T20:05:04.880 に答える
0

私に合った解決策が見つかりました.Nicoleの答えも正しいです。

select c1 from (select A1 from A)x 
inner join C on case when x.A1 is null then 'NONE' 
                 else (Select B1 from B where B2 = A1) 
                 end = C.C2
于 2012-11-13T14:46:07.307 に答える