所以,我尝试过现有的搜索结果,但我仍感到难过。希望有人可以提供帮助。
我有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 |
+-----+--------+
任何帮助非常感谢。
答案 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