我是sql的新手。 我有這些表中:與sql連接陷阱
表個人:
IndividualId IndividualName
Ind1 Mark
Ind2 Paul
ind3 Spencer
ind4 Mike
ind5 Hilary
表代理:
AgentId IndId(foreignKey)
Agent1 ind1
Agent1 ind2
Agent2 ind1
Agent3 ind4
事務表(事務可以經由代理或由個體本人進行) :
TranId IndId(foreignKey/Never Null) AgentId(foreignKey) TranAmount
Tran1 ind1 Agent1 $100
Tran2 ind1 NULL $500
tran3 ind3 NULL $200
tran4 ind4 Agent3 $50
tran5 ind4 NULL $30
結果應該是這樣的:
IndividualId IndividualName AgentId TranId TranAmount
Ind1 Mark Agent1 Tran1 $100
Ind1 Mark Agent2 NULL NULL
Ind1 Mark NULL Tran2 $500
Ind2 Paul Agent1 NULL NULL
Ind3 Spencer NULL Tran3 $200
ind4 Mike Agent3 tran4 $50
ind4 Mike NULL tran5 $30
ind5 Hilary NULL NULL NULL
按照一些評論(如果交易與代理相關聯,則在單獨的行中同一行別的顯示顯示)中,i使用以下查詢:
SELECT DISTINCT IndividualId, IndividualName, TranId, Agent.AgentId, Amount
FROM Individual
LEFT JOIN Transactions
ON Individual.IndividualId = Transactions.IndId
LEFT JOIN Agent
ON Transactions.AgentId = Agent.AgentId
這給了下面的成果,這是不正確:
IndividualId IndividualName TranId AgentId Amount
ind1 Mark Tran1 Agent1 100
ind1 Mark Tran2 null 500
ind2 Paul null null null
ind3 Spencer Tran3 null 200
ind4 Mike Tran4 Agent3 50
ind4 Mike Tran5 null 30
ind5 Hilary null null null
請顯示您的SQL查詢 – Hiten004
我的sql查詢沒有給出正確的結果。所以我認爲它會讓你們脫離軌道。我已經給出了表格和結果集應該是什麼。非常簡單。 –
看看這些可視化示例中的「left outer join」如何工作http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/看起來您希望所有來自Individual和那些匹配的記錄來自代理人以及與個人相匹配的所有交易記錄。因此,從單獨的「左連接」開始到事務處理,再從「左連接」開始到代理程序。個人有交易。交易與代理有關。事務可以在沒有代理的情況所以個人交易給代理人。 (每次都是左連接)嘗試一下,然後發佈你所做的事情。 – xQbert