鉴于桌子的东西
IdStuff StuffName IdLanguage
------- --------- ----------
1 Stuff 1 1
1 Stuff 2 2
Run Code Online (Sandbox Code Playgroud)
和观点:vwLanguages
IdLanguage Name
---------- ----
1 Language 1
2 Language 2
3 Language 3
Run Code Online (Sandbox Code Playgroud)
我想获得:
IdStuff StuffName IdLanguage
------- --------- ----------
1 Stuff 1 1
1 Stuff 2 2
1 NULL 3
Run Code Online (Sandbox Code Playgroud)
我试过RIGHT JOIN,但我没有成功......
SELECT
S.IdStuff, S.StuffName, vwLanguages.IdLanguage
FROM
Stuff S
RIGHT JOIN vwLanguages ON vwLanguages.IdLanguage = S.IdLanguage
Run Code Online (Sandbox Code Playgroud)
问题是只显示了2行,语言1和语言2 ...
Mic*_*son 10
RIGHT JOIN几乎从来都不是正确的方法.我认为你在寻找什么是一个CROSS JOIN独特的之间stuff的ID和language行,然后LEFT JOIN到stuff(如果可用)的详细信息:
SELECT
subStuff.IdStuff,
s.StuffName,
l.IdLanguage
FROM
(
SELECT DISTINCT IdStuff
FROM Stuff
) subStuff
CROSS JOIN vwLanguages l
LEFT JOIN Stuff s
ON s.IdStuff = subStuff.IdStuff
AND s.IdLanguage = l.IdLanguage
Run Code Online (Sandbox Code Playgroud)
您需要的原因CROSS JOIN是您基本上希望每个不同的ID stuff与每个记录匹配language,即使没有匹配IdLanguage.一旦你拥有这两组的笛卡尔积,那么你就想得到StuffName它是否碰巧有相应的stuffID和languageID.
实现有点难以解释,因为这些要求有点奇怪,并且与表结构并不完全匹配.
例如,为什么表中IdStuff不是唯一的stuff?
我假设这是一个人为的例子,但它提出了很多其他问题.