【发布时间】:2014-08-05 20:43:55
【问题描述】:
共有三个表,A、B 和 C 具有公共列(名称和编号)
- 表 A 有 10 条记录(比如 x),它们只能来自表 B(比如,y)和表 C(比如,z)(比如,x = y+z)。
- 表A中有一些记录的值为0(零)
- 我需要使用 column = name 将那些基于零值的记录与其他两个表进行比较。
- 并检查表 B 和表 C 中相同“名称”的列“数字”是否也为零 (0)?
我尝试编写以下示例查询来测试我的一组 3 个表数据 - 但由于某些原因,我无法获得所有 10 条记录?
SELECT a.name,a.number as A_number, b.number as B_number, c.number as C_number
from A a, B b, C c
WHERE a.name = b.name
上面的查询在sqlfiddle中给了我如下数据-
http://sqlfiddle.com/#!2/57f86/1
在上面的数据中-没有记录name="hello"
谁能纠正我哪里出错了?以及如何获得确切的结果?我需要表 A 中的所有记录。我知道如果我使用左连接,即使没有匹配,它也会填充所有左表数据。
可能性:表 A 有记录,有些可能存在于表 B 还有一些在表 C 中,但不是在两者上。
【问题讨论】:
-
使用左连接...sqlfiddle.com/#!2/57f86/2/0我不确定为什么没有加入 C,所以我假设是交叉连接...
-
但也许你追求的是sqlfiddle.com/#!2/57f86/4/0
-
在短语检查“数字”列中,“检查”是指“要求”还是“显示”?
-
我需要显示数字,即使它是零或非零相对于数字 = 0 的表 A 记录。你是对的我也想使用左连接,但是对如何用第三个表实现感到困惑。需要多练习sql :(
标签: sql postgresql join left-join