【问题标题】:For a one-to-one relationship, how many fields should I join on?对于一对一的关系,我应该加入多少个字段?
【发布时间】:2016-09-06 14:19:25
【问题描述】:

我只是想知道编写内部连接时的约定是什么。我想加入两个具有多个匹配数据实例的表。例如,在两个表中都可以找到“入职日期”、“员工编号”和“工资”。我应该加入所有这些领域吗?

SELECT 
     a 
FROM 
     table.example a
          inner join table.example b ON a.date = b.date and a.id = b.id_num and a.salary = b.salary

【问题讨论】:

  • 最好使用员工 id 进行内部联接,因为这是在这种情况下专门处理或关联其他表的关键部分。
  • 它 100% 取决于您的数据,而不是任何标准或任何东西,而且由于我们不知道您的数据,所以真的没有办法回答这个问题。加入所有这些列是否有意义?
  • 您通过您打算匹配的字段加入 - 其他人无法定义您想要做什么。您可能会考虑删除此问题并使用示例数据和所需结果提出另一个问题。跨表重复列听起来不像是一个健壮的数据模型。
  • 您能否发布两个表中的一些示例数据?以及您想要的结果应该是什么。无需删除此问题。只需编辑问题,提供有关您想要的更多信息和详细信息。

标签: sql field inner-join


【解决方案1】:

为了性能,通常你应该加入尽可能少的字段,最好是索引字段

【讨论】:

    【解决方案2】:

    这样加入不是一个好主意。因为你只会制造更多的冗余。

    1.您需要减少冗余。这意味着如果您将日期和薪水存储在表“B”中,则无需再次将它们存储在表“A”中。

    2.您需要一个唯一值来将第二张表与第一张表相关联。例如,在表“A”中创建“id”作为唯一列,在表“B”中创建指向表“A”id 的“ta_id”。然后像这样加入他们:

    SELECT table_a.*,table_b.salary,table_b.date
    FROM table_a
    LEFT JOIN table_b
    ON table_a.id = table_b.ta_id
    

    【讨论】:

      猜你喜欢
      • 2022-11-25
      • 1970-01-01
      • 2021-10-14
      • 1970-01-01
      • 1970-01-01
      • 2013-02-06
      • 1970-01-01
      • 2019-01-03
      • 2013-01-14
      相关资源
      最近更新 更多