如何构造SQL查询

时间:2010-05-25 17:58:23

标签: sql sql-server-express

我正在努力在我的C#应用​​程序和SQL Server Express数据库之间实现数据连接。请记住,之前我没有使用SQL查询。

我有以下相关表格:

ArticlesCommon
ArticlesLocalized
CategoryCommon
CategoryLocalized

ArticlesCommon表包含与语言无关的信息,如价格,重量等。

这是现在的陈述:

SELECT * 
    FROM ArticlesCommon 
    INNER JOIN ArticlesLocalized ON ArticlesCommon.ID = ArticlesLocalized.ID 
WHERE ArticlesLocalized.Language = @language
ORDER BY ArticlesCommon.DateAdded

ArticlesCommon包含每行的类别ID。现在,我想使用它在CategoryLocalized中查找本地化信息并将其添加到结果中,例如

SELECT *, CategoryLocalized.Name as CategoryName.

如果我明白了我的观点,这可行吗?

编辑:

另一个问题。 ArticlesLocalized和ArticlesCommon都包含ID,它们自然是相同的。我想从ArticlesCommon中选择所有内容,但除了来自ArticlesLocalized的ID之外的所有内容。是否有简洁的方法来实现这一目标?

我想那个

SELECT * FROM .....

从所有连接表中产生所有列?

2 个答案:

答案 0 :(得分:1)

加入

需要什么样的关键

这有用吗?

SELECT * FROM ArticlesCommon 
INNER JOIN ArticlesLocalized ON
ArticlesCommon.ID = ArticlesLocalized.ID 
INNER JOIN CategoryLocalized ON ArticlesCommon.ID = CategoryLocalized.ID
WHERE ArticlesLocalized.Language = @language
ORDER BY ArticlesCommon.DateAdded

答案 1 :(得分:0)

只需添加其他加入

即可
SELECT * FROM ArticlesCommon c 
   JOIN ArticlesLocalized L
       ON  a.ID = L.ID  
   JOIN CategoryLocalized CL
       ON  CL.ID = c.CategoryID  
WHERE ArticlesLocalized.Language = @language 
ORDER BY ArticlesCommon.DateAdded 

如果不是ArticlesCommon中的每一行都有一个CategoryId

,请使用外连接
SELECT * FROM ArticlesCommon c 
   JOIN ArticlesLocalized L
       ON  a.ID = L.ID  
   Left [OUTER] JOIN CategoryLocalized CL
       ON  CL.ID = c.CategoryID  
WHERE ArticlesLocalized.Language = @language 
ORDER BY ArticlesCommon.DateAdded 
  • [OUTER]是可选的,因为[Left]表示OUTER