使用左外连接获取表中的所有链接

时间:2013-06-24 09:42:03

标签: sql tsql

我有一个多语言网站,我想在网站上以所有可用语言导出产品的永久链接。如果产品没有特定语言的固定链接,则应返回空字符串。我的查询看起来像。

SELECT Permalink
FROM Permalink P
LEFT OUTER JOIN Languages L ON L.IDLanguage = P.IDLanguage
WHERE idProduct = 11347
ORDER BY L.IDLanguage

但我只返回产品表中的链接。如果语言表中存在laguage但在Product表中没有链接,则将省略它。但我需要一个空字符串,这是我的Language

    IDLanguage Name
_________________________
    1   English
    2   German
    12  Hungarian
    18  Slovenian

这是Product

IDProduct IDLanguage SEOName Permalink
1         1          abc     abc.html
1         2          ölm     oelm.html
1         18         jhas    jhas.html

例如,ID为1的产品只有3个链接,但在语言表中我有4种语言。这意味着查询仍应返回4行,其中IDLaguage = 12,它将为空。

4 个答案:

答案 0 :(得分:1)

我认为RIGHT OUTER JOIN是你需要的

SELECT Permalink
FROM Permalink P
RIGHT OUTER JOIN Languages L ON L.IDLanguage = P.IDLanguage
WHERE idProduct = 11347
ORDER BY L.IDLanguage

答案 1 :(得分:1)

SELECT COALESCE(p.Permalink, '')
FROM Languages l
LEFT JOIN dbo.Product p ON p.IDLanguage = l.IDLanguage
WHERE p.IDProduct = 1 OR p.IDProduct IS NULL
ORDER BY L.IDLanguage

<强> SQLFiddle DEMO

答案 2 :(得分:0)

我猜你需要FULL OUTER JOIN

 SELECT Permalink
    FROM Permalink P
    Full Outer Join Languages L ON L.IDLanguage = P.IDLanguage
    WHERE idProduct = 11347
    ORDER BY L.IDLanguage

答案 3 :(得分:0)

我认为你需要这个:

    SELECT ISNULL(Permalink,'')
    FROM Permalink P
    LEFT OUTER Languages L ON L.IDLanguage = P.IDLanguage
    WHERE idProduct = 11347
    ORDER BY L.IDLanguage