Sql 连接三个表
这不是一个我需要直接回答的问题,我只需要知道,从哲学的角度来看,我需要加入多少个表 假设我有3张桌子:Sql 连接三个表,sql,oracle,join,Sql,Oracle,Join,这不是一个我需要直接回答的问题,我只需要知道,从哲学的角度来看,我需要加入多少个表 假设我有3张桌子: TableA : Account_Number | Name | Address TableB : Account_Number | Occupation | Salary TableC : Account_Number | Model | Make 这些表都有一个共同的列。如果我要将这些表连接在一起,以便对每个表中具有匹配帐号的列进行排序,我将执行内部连接,以仅返回匹配的记录 在查
TableA :
Account_Number | Name | Address
TableB :
Account_Number | Occupation | Salary
TableC :
Account_Number | Model | Make
这些表都有一个共同的列。如果我要将这些表连接在一起,以便对每个表中具有匹配帐号的列进行排序,我将执行内部连接,以仅返回匹配的记录
在查询中,我会有如下内容:
SELECT T1.Name, T1.Address, T2.Occupation, T2.Salary, T3.Model, T3.Make
FROM TableA T1
INNER JOIN TableB T2 ON T1.Account_Number=T2.Account_Number
INNER JOIN TableC T3 ON T2.Account_Number=T3.Account_Number /Do I need to join T3 to T1 or is this handled by having T1 and T2 joined together?
WHERE ??.AccountNumber=1234123412341234 /Would any Table work in the WHERE clause here since we are all looking for the same account_number in each table?
内部联接将只返回您要联接的表中存在的记录,。所以在select OUR use表中,在where子句中,应该使用T1.AccountNumber
有关更多信息,请看这个链接 关于数据模型有一些事情要考虑。比如说 o这些表之间的关系是什么?有吗?有一个账号栏只是巧合吗 o假设存在关系,基数是多少?例如,对于表A中的任何给定行,表B中有多少对应行;0、1或多个。类似地,从表B到表A;表B和表C之间也是如此。 o。根据这些关系的含义,你可能会发现自己处于一种被称为“粉丝陷阱”的境地。在这种情况下,您的关系呈扇形散开:
B
/ \
/ \
A C
用一个例子更容易描述
让我们说:
A是一张销售代表表
B是一个分支表
C是一个科目表
因此,每个销售代表在一个分支机构工作(基数=1),每个分支机构有一个或多个销售代表(基数=多个)
每个分行处理多个账户,每个账户在一个分行持有
这是一个非常有效的数据模型
但是,从这个数据模型中,如果您想知道哪个销售代表处理哪个帐户,您不能。这就是所谓的风扇陷阱。在这个特定的例子中,您可能会通过在销售代表和客户之间建立直接关系来解决这个问题;即使它看起来是多余的
所以我知道这是对你问题的一个长答案,但它详细阐述了简短的答案,即“视情况而定”:)BobC在语义方面是正确的,视情况而定 从语法上讲,你的例子是完全正确的,我也会这么做。连接仅适用于两个对象/结果集,并且两个对象/结果集都必须处于不需要交叉连接的条件下。此外,在第二个联接中使用第一个联接中相同的account#列并不重要 至于WHERE条件,如果只有一个表获得了索引或Partionkey,则使用该索引或Partionkey。否则,使用WHERE语句提供最少行的表 从最小的表/结果集开始连接通常会带来好处。尽管Oracle将优化您关于收集的统计数据的陈述
B
/ \
/ \
A C