问题:
连接具有匹配列的两个表时,如何你能高效地同时检索两列对应的数据吗?
方法1:加入两次
如上例所示,两次加入同一个表可以根据每个匹配列分别检索数据:
SELECT t.PhoneNumber1, t.PhoneNumber2, t1.SomeOtherFieldForPhone1, t2.someOtherFieldForPhone2 FROM Table1 t JOIN Table2 t1 ON t1.PhoneNumber = t.PhoneNumber1 JOIN Table2 t2 ON t2.PhoneNumber = t.PhoneNumber2
方法2 : OR 在 ON 子句中
另一种方法虽然没有被证明是有效的,但会尝试使用连接多个匹配列ON 子句中的 OR:
SELECT ... FROM Table1 INNER JOIN Table2 ON Table1.PhoneNumber1 = Table2.PhoneNumber OR Table1.PhoneNumber2 = Table2.PhoneNumber
最佳实践:
建议将方法 1 作为最佳解决方案。 它提供了一个简单的解决方案以及明确的方式来检索与多个匹配列相对应的数据,而无需依赖复杂的 OR
改进设计的替代方案:
虽然这两种方法都可以实现所需的结果,但重要的是要考虑数据库设计最佳实践,以避免依赖基于表之间的联接自然键,例如电话号码。自然键可能会频繁更改,从而导致潜在的数据完整性问题。
以上是两次加入同一张表:何时以及如何是最佳实践?的详细内容。更多信息请关注PHP中文网其他相关文章!