我最近开始学习SQL,但似乎无法理解如何创建来自多个表/关系的相关结果的SQL语句。
给定以下模式:
Account(accNumber, balance, type)
Branch(BSB, phone, streetAddress, town)
registered(accNumber*, BSB*)我试图制定一些产出:列出所有的accNumber注册的一个特定的BSB (123),并显示其上市城镇(悉尼)。
对于第一个查询,我尝试了以下语句:
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;这一次,我得到了明确定义的列,因为它们在“已注册”表中具有相同的名称。
我尝试在select状态中创建别名,即accNumber作为ACCOUNT_NUMBER等,但仍然得到了模糊定义的错误。
我只试着列出注册表中的内容,但是没有得到城镇名称,只有accNumber和BSB作为外键传入。
我似乎无法理解如何从其他表中提取数据并正确地显示它们,并且非常感谢您的任何建议!
发布于 2016-10-02 02:07:32
这听起来像是一个通用的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“列(否则,由于有多个包含列account_number的表,所以它是模糊的)。
SQL是关于表和联接的。有时,您必须连接多个表才能得到所需的内容,如上面所示。如果您不像最初那样加入表,您将得到一个“交叉产品”,这不是您想要的。
我知道这很“轻”,但希望从上面对你的问题的回答中,你会对如何做到这一点有所了解。
如果你有问题的话,我很乐意帮你。在某种程度上,每个人对SQL都很陌生。别为此感到难过。这需要练习,然后就变得容易多了。
-Jim
发布于 2016-10-02 02:52:29
这也许能帮你开始。
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' https://stackoverflow.com/questions/39813151
复制相似问题