這是代碼,顯示輸入和所需的輸出。如何將此查詢寫爲完整聯接而不是聯合左/右聯接?
基本上,我試圖自我加入,以將我的經紀人聲明的結果與我的內部記錄進行匹配。所以左邊的一列是經紀人的名單,右邊是我的名單。如果經紀人有一個職位,而我沒有,則在右邊是NULL。如果我有一個職位,經紀人沒有,左邊是NULL。
左連接+右連接+聯合完全按照我的意願工作。似乎應該有一些巫術,讓一個完整的加入,沒有兩個選擇,但我無法弄清楚。
drop table MatchPositions
go
create table MatchPositions
(
mt_source varchar (10),
mt_symbol varchar (10),
mt_qty float,
mt_price float
)
go
insert into MatchPositions values ('BROKER', 'IBM', 100, 50.25)
insert into MatchPositions values ('BROKER', 'MSFT', 75, 30)
insert into MatchPositions values ('BROKER', 'GOOG', 25, 500)
insert into MatchPositions values ('BROKER', 'SPY', 200, 113)
insert into MatchPositions values ('MODEL', 'MSFT', 75, 30)
insert into MatchPositions values ('MODEL', 'GOOG', 25, 500)
insert into MatchPositions values ('MODEL', 'GLD', 300, 150)
go
select * from MatchPositions b
left join MatchPositions m on b.mt_symbol = m.mt_symbol and m.mt_source = 'MODEL'
where b.mt_source = 'BROKER'
union
select * from MatchPositions b
right join MatchPositions m on b.mt_symbol = m.mt_symbol and b.mt_source = 'BROKER'
where m.mt_source = 'MODEL'
和這裏的預期輸出:
mt_source mt_symbol mt_qty mt_price mt_source mt_symbol mt_qty mt_price
---------- ---------- ---------------------- ---------------------- ---------- ---------- ---------------------- ----------------------
NULL NULL NULL NULL MODEL GLD 300 150
BROKER GOOG 25 500 MODEL GOOG 25 500
BROKER IBM 100 50.25 NULL NULL NULL NULL
BROKER MSFT 75 30 MODEL MSFT 75 30
BROKER SPY 200 113 NULL NULL NULL NULL
你使用的是什麼版本的sql? – Dave 2011-04-22 18:49:27