Odbc

左外連接可能嗎?

  • July 16, 2021

我有一個需要解決的問題,希望你們中的一些人能提供幫助。

我有一個文章表(表 A)

Article     Description
A43234      desk 
A42323      paper
A43235      chair

和一個屬性表(表 B)

Attribute      Article      Value
height         A42323       120cm
width          A42324       200cm
material       A42323       wood
price          A43235       chair

並非每篇文章在表 B 中都有屬性。但如果表 A 中的文章有材料屬性條目,那麼它應該在結果中。如果沒有材料屬性條目,那麼它應該是一個空字元串。結果應該是:

Article      Attribute        Value
A42323       paper            wood
A42324       desk             ""
A42325       chair            ""

我的點子:

SELECT a.Article, a.Description, a.DLV, b.Value  
from tableA a 
join tableB b
on a.Article     = b.Article 
and b.Attribute = 'material'

謝謝!

我了解您希望每篇文章都有材料記錄,即使屬性表中不存在此類記錄。

您可以將您的選擇分成兩部分:

  • 材料合二為一 - 獲取所有文章的材料
  • 第二個所有其他屬性

然後你可以做UNION:

SELECT
   a.Article,
   a.Description,
   'material' AS Attribute,
   COALESCE(b.Value, '') AS Value
FROM article AS a
LEFT JOIN attribute AS b ON a.Article = b.Article
                            AND b.Attribute = 'material'
UNION ALL
SELECT
   a.Article,
   a.Description,
   b.Attribute,
   b.Value
FROM article AS a
LEFT JOIN attribute AS b ON a.Article = b.Article
                            AND b.Attribute <> 'material';

輸出:

Article     Description Attribute   Value
A43234      desk        material    ""
A42323      paper       material    wood
A43235      chair       material    ""
A43234      desk        NULL        NULL
A42323      paper       height      120cm
A43235      chair       price       chair

我使用了 T-SQL 並將 JOIN 更改為 LEFT JOIN,正如評論中指出的那樣,因為您失去了沒有屬性的文章。

引用自:https://dba.stackexchange.com/questions/295732