SQL。计算2列foreigns为相同类型的行

时间:2016-12-02 18:02:26

标签: mysql sql

我有这样的任务,我无法解决它 我有这些表:

users:
id | type

transactions:
id | sender_id | receiver_id

如何为每个交易行创建一个select

id | sender_id | receiver_id | sender_type | receiver_type  

尝试JOIN但没有成功,我只获得sender_idreceiver_idtype。 如何为每一个获得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

2 个答案:

答案 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表。

你需要别名才能做到这一点。我使用了单字母别名rs。这是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