programing

SQL 조인 후 쿼리된 테이블에서 데이터 제외

randomtip 2023. 8. 29. 22:28
반응형

SQL 조인 후 쿼리된 테이블에서 데이터 제외

정확한 조인 구조를 생각하고 있지는 않지만 이번 조인에서 원하는 결과를 얻을 수 없을 것 같습니다.

이것은 이 3개의 테이블에 대한 나의 SQL 스키마입니다.

스키마

select target, sender, message, amount, transactiontime, transaction_id 
from transactions 
join accounts on transactions.sender=accounts.account_id 
join users on users.user_id=accounts.user_id 
where users.user_id=40 
union 
select target, sender, message, amount, transactiontime, transaction_id 
from transactions 
join accounts on transactions.target=accounts.account_id 
join users on users.user_id=accounts.user_id
where users.user_id=40 
order by transactiontime 
limit 20;

SQL 결과 테이블

이것은 제가 가지고 있는 쿼리이고 그것은 3개의 테이블을 통해 쿼리합니다.기본적으로 나는 내 트랜잭션 테이블의 정보만 원하지만 해당 사용자와 연관되지 않은 account_id는 제외하고 싶습니다.이 경우 사용자 ID는 40이고 account_id는 57입니다.어떻게 하면 그것을 없앨 수 있을지 궁금했습니다.기본적으로 3명이 나타나지 않게 하는 방법.또한 보너스로, 제 계정과 관련된 ID를 포함하기 위한 쿼리의 구조는 무엇입니까?예를 들어 account_id 4와 57이 한 사용자의 것이고 그들 사이에 돈이 흐르고 있었다고 가정합니다.트랜잭션 쿼리 테이블에서 4와 57을 모두 보려면 어떻게 해야 합니까?

"해당 사용자와 연결되지 않은 account_id를 제외한다"는 것은 "해당 사용자와 연결된 계정만 포함한다"는 의미가 아닙니까?

declare @user_id int = 40

select target, sender, message, amount, transactiontime, transaction_id 
from transactions 
join accounts   on  transactions.sender=accounts.account_id 
                OR  transactions.target=accounts.account_id 
where accounts.user_id=@user_id 

발송인과 대상이 모두 동일한 사용자에게 속한 계정의 트랜잭션만 확인하는 것이 목표인 경우:

declare @user_id int = 40

select target, sender, message, amount, transactiontime, transaction_id 
from transactions 
join accounts  as send on  transactions.sender=send.account_id 
join accounts  as targ on  transactions.target=targ.account_id 
where send.user_id=@user_id 
and   targ.user_id=@user_id 

지정된 사용자 ID에 대해 트랜잭션 테이블의 모든 정보를 원하는 경우:

select 
    *
from 
    transactions
where 
    transactions.user_id = 40 

충분할 것입니다.당신은 그것이 필요하지 않습니다.union동일한 쿼리에 대한 문 또는 사용자 테이블에 가입하기 위한 문입니다.

이러한 트랜잭션이 사용될 사용자의 모든 계정 ID를 나열하려면 다음을 사용할 수 있습니다.

select 
    target, sender, message, amount, transactiontime, transactions.transaction_id, accounts.account_id
from 
    transactions
inner join
    accounts
on
    transactions.target = accounts.user_id

언급URL : https://stackoverflow.com/questions/35652235/excluding-data-from-a-queried-table-after-sql-join

반응형