我有这样的任务,我无法解决它 我有这些表:
users:
id | type
transactions:
id | sender_id | receiver_id
如何为每个交易行创建一个select
:
id | sender_id | receiver_id | sender_type | receiver_type
尝试JOIN
但没有成功,我只获得sender_id
,receiver_id
,type
。
如何为每一个获得type
列两次?
例如:
users:
id | type
1 | 4
2 | 3
3 | 1
4 | 3
transactions:
id | sender_id | receiver_id
1 | 2 | 3
2 | 1 | 4
3 | 3 | 1
result:
id | sender_id | receiver_id | sender_type | receiver_type
1 | 2 | 3 | 3 | 1
2 | 1 | 4 | 4 | 3
3 | 3 | 1 | 1 | 4
答案 0 :(得分:1)
您需要为每种类型(发件人和收件人)明确加入用户表,例如:
SELECT
tr.id,
tr.sender_id,
tr.receiver_id,
us_sn.type,
us_rx.type
FROM
transactions tr
JOIN
users us_rx ON tr.receiver_id = us_rx.id
JOIN
users us_sn ON tr.sender_id = us_sn.id
答案 1 :(得分:1)
您需要的技巧是JOIN
users
表两次到transactions
表。
你需要别名才能做到这一点。我使用了单字母别名r
和s
。这是JOIN操作的一个非常常见的应用。它就好像有两个表副本。
它也有助于为列名创建别名;当您为它们提供具有重复列名的结果集时,某些SQL客户端会奇怪地工作。
SELECT t.id, t.sender_id, t.receiver_id,
s.type sender_type,
r.type receiver_type
FROM transactions t
JOIN users s ON t.sender_id = s.id
JOIN users r ON t.receiver_id = r.id
ORDER BY t.id