SQL效率连接两个字段或一个字段

时间:2014-04-09 20:27:10

标签: mysql sql join relational-database

假设我有三个表:帐户,联系人和地址。要帐户和联系我想分配多个地址。在地址join_typejoin_id中添加两个字段然后再运行查询更好吗?

SELECT a.*
FROM address a
INNER JOIN contact c ON c.id = a.join_id AND a.join_type = 'CONTACT';

SELECT a.*
FROM address a
INNER JOIN account ac ON ac.id = a.join_id AND a.join_type = 'ACCOUNT';

或拥有account_idcontact_id代替join_typejoin_id并运行查询:

SELECT a.*
FROM address a
INNER JOIN contact c ON c.id = a.contact_id;

SELECT a.*
FROM address a
INNER JOIN account ac ON ac.id = a.account_id;

或者甚至可能有两个单独的地址表用于帐户和联系?如果我愿意的话,第一种选择对未来是最好的选择,例如还有分配给用户的地址。

1 个答案:

答案 0 :(得分:0)

选择a。* 来自地址a INNER JOIN联系人c ON c.id = a.contact_id;

您有多种类型的地址不会导致任何问题,因为contact_id应该始终是唯一的。

我还会考虑使用account_id在地址中添加另一个列,并且还有另一个这样的连接:

选择a。* 来自地址a INNER JOIN帐户a ON a.id = a.account_id;