我有下表:
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_id
和receiver_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 .. WHEN
和IN
:
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);