为了账号安全,请及时绑定邮箱和手机立即绑定

在同一张桌子上两次联接的最佳方法是什么?

在同一张桌子上两次联接的最佳方法是什么?

UYOU 2019-12-25 10:59:28
这有点复杂,但是我有2个表。假设结构是这样的:*Table1*IDPhoneNumber1PhoneNumber2*Table2*PhoneNumberSomeOtherField可以基于Table1.PhoneNumber1-> Table2.PhoneNumber或Table1.PhoneNumber2-> Table2.PhoneNumber联接表。现在,我想获得一个包含PhoneNumber1,与PhoneNumber1,PhoneNumber2对应的SomeOtherField和与PhoneNumber2对应的SomeOtherField的结果集。我想到了两种方法来执行此操作-通过在表上联接两次或通过在ON子句中使用OR联接一次。方法1:SELECT t1.PhoneNumber1, t1.PhoneNumber2,    t2.SomeOtherFieldForPhone1, t3.someOtherFieldForPhone2FROM Table1 t1INNER JOIN Table2 t2   ON t2.PhoneNumber = t1.PhoneNumber1INNER JOIN Table2 t3   ON t3.PhoneNumber = t1.PhoneNumber2这似乎有效。方法2:某种程度上看起来像这样的查询-SELECT ...FROM Table1INNER JOIN Table2    ON Table1.PhoneNumber1 = Table2.PhoneNumber OR      Table1.PhoneNumber2 = Table2.PhoneNumber我还没有开始工作,我不确定是否有办法做到这一点。做到这一点的最佳方法是什么?这两种方法看起来都不是简单或直观的……是否有更直接的方法来做到这一点?一般如何实施此要求?
查看完整描述

3 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

除非Phone1或(更可能是)phone2可以为null,否则第一个是好的。在这种情况下,您要使用左联接而不是内部联接。


当您有一个包含两个电话号码字段的表时,通常这是一个不好的信号。通常,这意味着您的数据库设计存在缺陷。


查看完整回答
反对 回复 2019-12-25
  • 3 回答
  • 0 关注
  • 564 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信