基于null的条件内连接

时间:2012-11-12 19:53:13

标签: sql

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

我有3个表,A(3列),B(2列)和C(2列),我需要根据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    |
+-----+--------+

任何帮助非常感谢。

2 个答案:

答案 0 :(得分: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值,那么请告知,尽管该查询可能有点困难。

答案 1 :(得分: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