【问题标题】:How to combine MYSQL query using the WITH Clause如何使用 WITH 子句组合 MYSQL 查询
【发布时间】:2017-08-24 23:23:48
【问题描述】:

我一生都无法弄清楚如何组合这两个 MYSQL 查询。下面代码的唯一区别是它们选择了单独的字段并将它们分配给单独的别名。我尝试使用 WITH 子句,但无法弄清楚。任何帮助将不胜感激。

(
    SELECT TOP 1 ArticlePath 
    FROM [blog].[TBL_BlogArticles] suba WITH (NOLOCK)
    INNER JOIN [blog].[TBL_BlogArticlesLanguages] subl WITH (NOLOCK) ON subl.LanguageCode = @LanguageCode AND subl.ArticleID = suba.ArticleID
    INNER JOIN [blog].[TBL_BlogArticleCategory] subac WITH (NOLOCK) ON subac.ArticleID = suba.ArticleID
    INNER JOIN [blog].[TBL_BlogCategories] subc WITH (NOLOCK) ON subc.CategoryID = subac.CategoryID
    WHERE subc.BlogID = @BlogID AND [TimeStamp] < l.[TimeStamp] AND Enabled = 1
    ORDER BY a.Priority DESC, [TimeStamp] DESC
) 
AS PreviousArticlePath,
(
    SELECT TOP 1 ArticleTitle 
    FROM [blog].[TBL_BlogArticles] suba WITH (NOLOCK)
    INNER JOIN [blog].[TBL_BlogArticlesLanguages] subl WITH (NOLOCK) ON subl.LanguageCode = @LanguageCode AND subl.ArticleID = suba.ArticleID
    INNER JOIN [blog].[TBL_BlogArticleCategory] subac WITH (NOLOCK) ON subac.ArticleID = suba.ArticleID
    INNER JOIN [blog].[TBL_BlogCategories] subc WITH (NOLOCK) ON subc.CategoryID = subac.CategoryID
    WHERE subc.BlogID = @BlogID AND [TimeStamp] < l.[TimeStamp] AND Enabled = 1
    ORDER BY a.Priority DESC, [TimeStamp] DESC
) 
AS PreviousArticleTitle,

【问题讨论】:

  • 你确定你想的不是'union'而不是'union'?
  • 看起来不像 MySQL

标签: mysql sql database with-statement


【解决方案1】:

如果你想把它放在同一行,只需添加 SELECT,例如:

SELECT 1 AS PreviousArticlePath, 2 AS PreviousArticleTitle

结果

PreviousArticlePath PreviousArticleTitle
1                   2

1 和 2 将是您的子查询

对于您的查询将是

SELECT
(
    SELECT TOP 1 ArticlePath 
      FROM [blog].[TBL_BlogArticles] suba WITH (NOLOCK)
     INNER JOIN [blog].[TBL_BlogArticlesLanguages] subl WITH (NOLOCK) ON subl.LanguageCode = @LanguageCode AND subl.ArticleID = suba.ArticleID
     INNER JOIN [blog].[TBL_BlogArticleCategory] subac WITH (NOLOCK) ON subac.ArticleID = suba.ArticleID
     INNER JOIN [blog].[TBL_BlogCategories] subc WITH (NOLOCK) ON subc.CategoryID = subac.CategoryID
     WHERE subc.BlogID = @BlogID AND [TimeStamp] < l.[TimeStamp] AND Enabled = 1
     ORDER BY a.Priority DESC, [TimeStamp] DESC
) AS PreviousArticlePath,
(
    SELECT TOP 1 ArticleTitle 
      FROM [blog].[TBL_BlogArticles] suba WITH (NOLOCK)
     INNER JOIN [blog].[TBL_BlogArticlesLanguages] subl WITH (NOLOCK) ON subl.LanguageCode = @LanguageCode AND subl.ArticleID = suba.ArticleID
     INNER JOIN [blog].[TBL_BlogArticleCategory] subac WITH (NOLOCK) ON subac.ArticleID = suba.ArticleID
     INNER JOIN [blog].[TBL_BlogCategories] subc WITH (NOLOCK) ON subc.CategoryID = subac.CategoryID
     WHERE subc.BlogID = @BlogID AND [TimeStamp] < l.[TimeStamp] AND Enabled = 1
     ORDER BY a.Priority DESC, [TimeStamp] DESC
) AS PreviousArticleTitle

结果

PreviousArticlePath      PreviousArticleTitle
"Some ArticlePath value" "Some ArticleTitle value"

【讨论】:

  • 如果查询已经是子查询怎么办?我得到Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-31
  • 1970-01-01
  • 2010-11-25
  • 2014-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多