【发布时间】:2023-03-21 01:41:01
【问题描述】:
这有点复杂,但我有 2 张桌子。假设结构是这样的:
*Table1*
ID
PhoneNumber1
PhoneNumber2
*Table2*
PhoneNumber
SomeOtherField
可以根据 Table1.PhoneNumber1 -> Table2.PhoneNumber 或 Table1.PhoneNumber2 -> Table2.PhoneNumber 连接表。
现在,我想获得一个结果集,其中包含 PhoneNumber1、SomeOtherField 对应于 PhoneNumber1、PhoneNumber2 和 SomeOtherField 对应于 PhoneNumber2。
我想到了 2 种方法来做到这一点 - 要么在表上加入两次,要么在 ON 子句中使用 OR 加入一次。
方法一:
SELECT t1.PhoneNumber1, t1.PhoneNumber2,
t2.SomeOtherFieldForPhone1, t3.someOtherFieldForPhone2
FROM Table1 t1
INNER JOIN Table2 t2
ON t2.PhoneNumber = t1.PhoneNumber1
INNER JOIN Table2 t3
ON t3.PhoneNumber = t1.PhoneNumber2
这似乎行得通。
方法二:
以某种方式有一个看起来有点像这样的查询 -
SELECT ...
FROM Table1
INNER JOIN Table2
ON Table1.PhoneNumber1 = Table2.PhoneNumber OR
Table1.PhoneNumber2 = Table2.PhoneNumber
我还没有让这个工作,我不确定是否有办法做到这一点。
完成此任务的最佳方法是什么?这两种方法似乎都不简单或直观......有没有更直接的方法来做到这一点?这个要求一般是如何实现的?
【问题讨论】: