SQL查询,按两个不同的列筛选结果



我有下表:

contracts
id   |   payer_user_id   |   receiver_user_id   |   amount
-----------------------------------------------------------
1    |   12              |   34                 |   12.03
2    |   12              |   34                 |   998
3    |   12              |   45                 |   123.12
4    |   34              |   23                 |   123.12
5    |   45              |   12                 |   34.1
6    |   18              |   12                 |   34

payer_user_idreceiver_user_id都是用户表的外键引用。

我想从合同表中获取与用户12以任何方式(作为付款人或接收者(关联的所有用户的不同id

因此,结果应该是:

34
45
18

我该怎么做?

您可以使用联合查询:

SELECT payer_user_id FROM contracts WHERE receiver_user_id = 12
UNION
SELECT receiver_user_id FROM contracts WHERE payer_user_id = 12;

上述联合查询的每一半都在与用户12的关系的一侧找到ID。请注意,我们甚至不必在这里显式使用DISTINCT,因为并集将删除重复项。

您可以按如下方式使用CASE .. WHENIN

SELECT DISTINCT case when payer_user_id <> 12 
then payer_user_id 
else receiver_user_id 
end 
FROM contracts 
WHERE 12 IN (receiver_user_id,payer_user_id);

最新更新