2016-02-26 71 views
1

我不知道我是否沒有考慮正確的連接結構,但似乎無法從此連接中獲得我想要的結果。在sql連接之後排除查詢表中的數據

這是我這3個表

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 result table

這是我有查詢,並將其通過3個表查詢的SQL模式。基本上我只需要來自我的交易表的信息,但我想排除任何不與該用戶關聯的account_id。在這種情況下,用戶ID是40,他們的account_id是57.想知道如何才能擺脫這種情況。基本上如何讓3不出現。另外作爲獎勵,將查詢的結構包括id與我的賬戶相關聯。就像account_id 4和57屬於一個用戶,並且錢在他們之間流動一樣。我如何能夠在我的交易查詢表中看到4和57?

+0

我不明白這一點。您顯示的是用戶40的前20個交易,無論通過他們的哪個賬戶,無論是作爲發件人還是收件人。這不是你想要的嗎?你還想要什麼?如果您向我們展示您獲得的結果與您期望的結果(以及文本請不要作爲圖片鏈接),這可能會有所幫助。 –

回答

0

爲「排除關聯到該用戶的任何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 [email protected]_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 [email protected]_id 
and [email protected]_id 
+0

是的,所以我不想要任何不屬於該用戶的帳戶,該查詢也將顯示其他用戶的account_id信息 –

+0

此查詢爲您提供屬於該用戶的帳戶是發件人或目標。另一個用戶的帳戶可能或可能是任何給定交易中的發件人/目標副本。 –

+0

目標是僅獲得屬於同一用戶的帳戶之間的交易嗎? (編輯答案) –

0

給定用戶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