这有点复杂,但是我有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,否则第一个是好的。在这种情况下,您要使用左联接而不是内部联接。
当您有一个包含两个电话号码字段的表时,通常这是一个不好的信号。通常,这意味着您的数据库设计存在缺陷。
- 3 回答
- 0 关注
- 607 浏览
添加回答
举报
0/150
提交
取消