我試圖加入兩個有字符鍵的表,我需要使用SELECT查詢來形成一個加入條件。這裏是數據:SQL JOIN問題 - 複雜SELECT爲JOIN條件
Table M
MKey OtherData
---- ---------
ABCD kjjh
EFGH oioo
IJKL uhdjdhu
MNOP isdid
QRST lkuh
Table FUN
FUNKey BinaryField
------ -----------
ABCD/GGG 1
ABCD/KKK 0
ABCD/MMM 1
EFGH/ABC 1
IJKL/DDD 1
IJKL/VVV 1
IJKL/XXX 0
MNOP/AAA 1
NMOP/DEF 1
NMOP/FFF 1
QRST/SSS 0
這兩個表中沒有唯一或數字字段,也沒有其他字段可以連接。
這是我的出發查詢與JOIN:
Select MKey,Otherdata from M
LEFT OUTER JOIN FUN
ON M.MKey = left(FUNKey, CHARINDEX ('/', FUNKey) -1)
AND FUN.BinaryData=1
Returns
ABCD kjjh
ABCD kjjh
EFGH oioo
IJKL uhdjdhu
ABCD kjjh
MNOP isdid
MNOP isdid
MNOP isdid
MNOP isdid
我需要什麼返回是從M個一排,其中存在更多的樂趣行以「MKEY」開始,有樂趣之一。 BinaryData = 1,像這樣:
ABCD kjjh
EFGH oioo
IJKL uhdjdhu
MNOP isdid
我已經嘗試GROUP BY,MIN,MAX在FUN.FUNKey列沒有成功。
如果我使用了一個ROW_NUMBER,OVER和分區等自行查詢我得到了我想要參加什麼:
(Select M_Code from
(Select left(F.FUNKey, CHARINDEX ('/', F.FUNKey) -1) as M_Code
,row_number() over (partition by left(F.FUNKey, CHARINDEX ('/', F.FUNKey) -1)
order by left(F.FUNKey, CHARINDEX ('/', F.FUNKey) -1))
as rn
from FUN F
where F.BinaryData=1
) tmp
Where rn=1
)
返回:
ABCD
EFGH
IJKL
MNOP
所以我覺得我很好,直到我嘗試將它用於連接:
The following code gives me:
"Subquery returned more than 1 value. This is not permitted when the
subquery follows =, !=, <, <= , >, >= or when the subquery is used as an
expression."
Select MKey,Otherdata from M
LEFT OUTER JOIN ON M.MKEY =
(Select M_Code from
(Select left(F.FUNKey, CHARINDEX ('/', F.FUNKey) -1) as M_Code
,row_number() over (partition by left(F.FUNKey, CHARINDEX ('/', F.FUNKey) -1)
order by left(F.FUNKey, CHARINDEX ('/', F.FUNKey) -1))
as rn
from FUN F
where F.BinaryData=1
) tmp
Where rn=1
)
是否有一個簡單的解決方案來使用SELECT的結果我錯過了一個連接,還是我試圖用零(再次)除?
環境是MS SQL 20012
但在結果集中,他沒有針對QRST,lkuh @jpw – mohan111
@Jonathan我意識到,這就是爲什麼我解決它在最後一句中。我認爲OP希望該行作爲原始查詢使用「左外連接」,否則「內連接」更合理。 – jpw
我同意忘了看@ jpw – mohan111