Home > Software design >  Using parent SQL column in subquery
Using parent SQL column in subquery

Time:11-14

Good morning. I'm trying to pull the username of the user from the column in to_id. Is there. It'd be simple if I was just filtering on to_id, but I also need records from another column from_id. I've attempted doing a UNION to get around this issue, but it only pulls records from user.id 3 of course.

Does anyone happen to know a way around this? I'm somewhat new to writing complex SQL queries. Haven't been able to figure much out from similar questions.

SELECT
users.username, -- Placeholder until username from to_id can be pulled
payment.id,
to_id,
amount,
state,
type,
timedate
FROM
    payment
LEFT JOIN users ON users.id = payment.to_id AND users.id = payment.from_id 
WHERE to_id = 3 OR from_id = 3

The result of that would be along the lines of:

 ---------- ---- ------- -------- ---------- ------ --------------------- 
| username | id | to_id | amount | state    | type | timedate            |
 ---------- ---- ------- -------- ---------- ------ --------------------- 
| NULL     |  1 |     1 |  12.56 | COMPLETE | u2u  | 2021-11-12 06:09:21 |
| NULL     |  2 |     1 |  43.00 | COMPLETE | u2u  | 2021-11-12 06:17:10 |
| NULL     |  3 |     3 |   2.25 | COMPLETE | u2u  | 2021-11-12 06:22:53 |
 ---------- ---- ------- -------- ---------- ------ --------------------- 

Username is null due to the two Joins being AND. If it's OR, the username will show up, but the rows will be there twice. Once with the to_id username, once with the from_id username.

CodePudding user response:

So you have one users table for all payers and payees accounts and one transaction table with two ID columns (payer and payee)? You need to join the users table to the transaction table twice, once to get the payer info, once to get the payee info.

select
    payment.from_id,
    from_user.username,
    payment.to_id,
    to_user.username,
    payment.id,
    amount,
    state,
    type,
    timedate
from payment
left join users as from_user 
    on from_user.id = payment.from_id 
left join users as to_user 
    on to_user.id = payment.to_id 
where payment.to_id = 3 OR payment.from_id = 3
  • Related