我最近开始学习SQL,但似乎无法创建从多个表/关系形成相关结果的SQL语句。
给出以下架构:
Account(accNumber, balance, type)
Branch(BSB, phone, streetAddress, town)
registered(accNumber*, BSB*)
我正在尝试制定一些输出: 列出所有在特定BSB(123)注册的accNumber,并显示其列出的城镇(悉尼)。
我为第一个查询尝试了以下语句:
SELECT accNumber, BSB, town
FROM ACCOUNT, BRANCH
WHERE BSB = 123;
但是,即使他们不属于BSB,我也会列出每个帐户,所以我尝试了:
SELECT accNumber, BSB, town
FROM ACCOUNT, BRANCH
WHERE BSB = 123
AND Town = 'Sydney'
AND account.accNumber=registered.accNumber
AND branch.bsb=registered.bsb;
这次我对列进行了模糊定义,因为它们在"注册"中具有相同的名称。表
我已尝试在选择语句中添加别名,即accNumber AS ACCOUNT_NUMBER等,但仍然会出现含糊不清的错误。
我尝试只列出注册表中的内容,但后来我没有得到城镇名称,只有accNumber和作为外键传入的BSB。
我似乎无法理解如何从其他表中提取数据并正确显示它们,并且非常感谢任何建议!
答案 0 :(得分:1)
这可能有助于您开始。
SELECT a.ccNumber, b.BSB, c.town
FROM ACCOUNT as a
inner join registered as b on b.accNumber=a.accNumber
inner join BRANCH as c on c.bsb = b.bsb
WHERE b.BSB = 123
AND c.Town = 'Sydney'
答案 1 :(得分:0)
所以这听起来像是一个普通的SQL问题。对于您的查询,这是您正在查看的内容:
select a.account_number
from account a, brance b, registered r
where a.account_number = r.account_number and
a.bsb = b.bsb and
b.bsb = 123;
这将从帐户表中获取BSB 123中的所有帐号。当您有多个具有相同列的表时,您需要告诉Oracle(以及任何数据库)" account_number& #34;您引用的列(否则它不明确,因为有多个表包含列account_number)。
SQL是关于表和连接的。有时你必须加入几个表来获得你需要的东西,如上所述。如果您没有像原来那样加入表格,那么您将获得一个"交叉产品",这不是您想要的。
我知道这是非常轻松的#34;但希望从上述问题的答案中,您可以了解如何做到这一点。
如果您有疑问,我很乐意为您提供更多帮助。在某些时候,每个人都是SQL新手。不要为此感到难过。这需要练习,然后变得更容易。
-Jim