这不是一个我需要直接回答的问题,我只需要从哲学的角度知道我需要加入多少个表。
说我有3张桌子:
var form_data = new FormData($('form')[0]);
$.ajax({
type: 'POST',
url: 'ajax/ajax-reg.php',
data: form_data,
processData: false,
contentType: false,
success: function() {
// handle response here...
}
});
这些表都有一个共同的列。如果我要将这些表连接在一起以获得每个表中具有匹配帐号的列,我会进行内部联接以仅返回匹配的记录。
在查询中,我会有类似的东西:
TableA :
Account_Number | Name | Address
TableB :
Account_Number | Occupation | Salary
TableC :
Account_Number | Model | Make
答案 0 :(得分:0)
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 T1.AccountNumber=1234123412341234
内部联接将仅返回您要加入的表中存在的记录。因此,在您选择使用TableA时,在where子句中应使用T1.AccountNumber
有关详细信息,请查看此链接http://www.sql-join.com/
答案 1 :(得分:0)
有关您的数据模型需要考虑的一些事项。例如
o这些表之间有什么关系?有吗?事实上,Account_Number列只是一个巧合 o假设存在关系,基数是什么?例如,对于表A中的任何给定行,表B中有多少对应的行; 0,1或多个。同样从表B到表A;表B和表C之间类似。 O操作。根据这些关系的含义,您可能会发现自己处于一种称为“粉丝陷阱”的情境中。在这种情况下,你可以摆脱关系:
B
/ \
/ \
A C
使用示例更容易描述。
让我们说:
A是销售代表的表格 B是分支表 C是一个账户表
因此每个销售代表在一个分支中工作(基数= 1),每个分支有一个或多个销售代表(基数=多个) 每个分支机构处理多个账户,每个账户都在一个分支机构
这是一个完全有效的数据模型
但是,从这个数据模型中,如果要查找哪个销售代表处理哪个帐户,则不能。这就是所谓的风扇陷阱。在这个特定的例子中,您可能会解决这个问题,即直接在Sales Rep和Accounts之间建立关系;即使它可能看起来多余。
所以我知道这是对你的问题的一个很长的答案,但它详细阐述了简短的答案,这是"它取决于" :)
答案 2 :(得分:0)
BobC对于语义是正确的,它取决于。
从语法上讲,你的例子是完全正确的,我也是如何做到的。加入仅适用于2个对象/结果集,并且两者都必须处于不希望交叉连接的情况下。此外,您在第二个联接中使用的第一个联接中的哪个相同帐号#列并不重要。
对于WHERE条件,如果只有一个表获得了Index或Partionkey,请使用该表。否则,使用WHERE语句为您提供最少行的表。
从最小的表/结果集开始,加入通常会带来好处。尽管Oracle仍会根据收集的统计信息优化您的声明。