-1

所以,我试过浏览现有的搜索结果,但我仍然感到难过。希望有人可以提供帮助。

我有 3 个表,A(3 列)、B(2 列)和 C(2 列),我需要根据 A1 中的列获取 C1 列中的值。

因此,如果 A1 中的值为 NULL,则为“NONE”,只需加入 C2 中的行并获取 C1 的值。

但是,如果 A1 中的值不为 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';

我同时获得a1 和 c1,因为 c1 值可能是混乱的,这可以区分它。如果您希望 c1 值按给定顺序排列,请务必告知,尽管该查询可能有点困难。

于 2012-11-12T20:05:04.880 回答
0

找到适合我的解决方案,妮可的回答也是正确的。

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 回答