【问题标题】:How do I do this ridiculous SQL multiple join statement? [closed]我该如何做这个荒谬的 SQL 多重连接语句? [关闭]
【发布时间】:2011-12-04 22:10:17
【问题描述】:

好的,由于代码发生了很大变化,我正在废弃旧版本。这是我现在拥有的:

SELECT
   article.articleId,
   article.articleName,
   article.articleStoryTypeId,
   artIndustry.industryName,
   author.userPrefix,
   author.userMiddleName,
   article.articleStatus,
   article.articleCreateDate,
   article.articleModifyDate
FROM
   users
LEFT JOIN clickTrack
 ON users.userId = clickTrack.clickUserId
LEFT JOIN article
 ON clickTrack.clickDocumentId = article.articleId
LEFT JOIN users author
 ON author.userId = article.articleAuthorId
LEFT JOIN industry artIndustry
 ON artIndustry.industryId =    substring(article.articleIndustryId,0,charindex(',',article.articleIndustryId)-1)
WHERE ((clickTrack.clickDocumentTable = 'breaking')
     OR (clickTrack.clickDocumentTable = 'article'))
  AND article.articleCreateDate > '1/1/2008 0:00:00 AM'
  AND ((users.userindustryId = '1') 
    OR (users.userindustryId LIKE '%,1') 
    OR (users.userindustryId LIKE '%,1,%') 
    OR (users.userindustryId LIKE '1,%'))
GROUP BY
   article.articleId,
   article.articleName,
   article.articleStoryTypeId,
   artIndustry.industryName,
   author.userPrefix,
   author.userMiddleName,
   article.articleStatus,
   article.articleCreateDate,
   article.articleModifyDate
Order By article.articleId

返回的数据如下:

8332, 理想情况, 突发新闻, NULL, NULL, NULL, Prod, 2011-07-25 14:48:01.203, 2011-08-09 07:41:29.373

我添加了逗号。 3 个空字段是行业名称、用户的名字和用户的姓氏。 (是的,有人错误地命名了表格字段。)我非常疲倦,所以我不知道这是否足够的信息。如果您需要更多,请告诉我。

编辑

它现在正在工作。我不得不从左连接子句中去掉“-1”。哦,是的,我只是在报废名称字段。那仍然行不通。 >.

【问题讨论】:

  • 我看到的第一个问题是您无法决定表别名是users2 还是user2
  • 这几乎是完全无法理解的。。试着描述一下你想做的事情怎么样?
  • 不,我的意思是,你想对查询做什么..
  • 如果您在 SELECT 部分有字段但在 GROUP BY 中没有字段,则会看到错误。

标签: sql join left-join multiple-tables


【解决方案1】:

作者列表和用户列表真的是同一张表吗?你想查询什么?

一个问题是您试图返回不在您的 group by 中的字段。

试试这个:

SELECT
   article.articleId,
   article.articleName,
   article.articleStoryTypeId,
   artIndustry.industryName,
   author.userPrefix,
   author.userMiddleName,
   article.articleStatus,
   article.articleCreateDate,
   article.articleModifyDate,
FROM
   users
LEFT JOIN clickTrack
 ON users.userId = clickTrack.clickUserId
LEFT JOIN article
 ON clickTrack.clickDocumentId = article.articleId
LEFT JOIN users author
 ON author.userId = article.articleAuthorId
LEFT JOIN industry artIndustry
 ON artIndustry.industryId = article.articleIndustryId
WHERE ((clickTrack.clickDocumentTable = 'breaking')
     OR (clickTrack.clickDocumentTable = 'article'))
  AND article.articleCreateDate > '1/1/2008 0:00:00 AM'
  AND users.industryId = 1
GROUP BY
   article.articleId,
   article.articleName,
   article.articleStoryTypeId,
   artIndustry.industryName,
   author.userPrefix,
   author.userMiddleName,
   article.articleStatus,
   article.articleCreateDate,
   article.articleModifyDate,
Order By article.articleId

【讨论】:

  • 哦,我没有意识到他们必须在小组中。我习惯了mysql,它们不必包含在内。我会试试的。
  • 谢谢,但这也没用。 (是的,我纠正了我最初的 users2 错误。)
  • 嗯,我不知道是否有错误,因为我正在使用 ASP 并构建了自己的查询窗口。但没有结果,也没有可见的错误。
  • 您需要自己进行更多故障排除。首先从结果中删除新列。然后删除一个新的连接,然后是另一个。你什么时候看到结果? (我认为这个查询中发生了其他事情,因为左连接不应该删除行。你改变了 where 子句吗?)
  • 不,它没有改变。我只是添加了我收到的错误,并且也会尝试您的建议。
【解决方案2】:

啊,好的,试试这个:

SELECT 
  article.articleId,
  article.articleName, 
  article.articleStoryTypeId, 
  a.industryName, 
  a.userPrefix, 
  a.userMiddleName, 
  article.articleStatus, 
  article.articleCreateDate, 
  article.articleModifyDate,
  count(*)
FROM (select * from users
      INNER JOIN industry ON industry.industryId = users.userIndustryId 
                          AND industry.industryId = 1) a
LEFT OUTER JOIN clickTrack ON users.userId = clickTrack.clickUserId 
                     AND clickTrack.clickDocumentTable IN ('breaking','article')
LEFT OUTER JOIN article ON clickTrack.clickDocumentId = article.articleId 
                  AND article.articleCreateDate > '1/1/2008 0:00:00 AM' 
GROUP BY 
  article.articleId,
  article.articleName, 
  article.articleStoryTypeId, 
  a.industryName, 
  a.userPrefix, 
  a.userMiddleName, 
  article.articleStatus, 
  article.articleCreateDate, 
  article.articleModifyDate
ORDER BY 
  article.articleId

【讨论】:

  • 谢谢,但仍然没有返回。此外,在这种情况下,作者必须单击链接才能转到他们自己的文章才能显示。
  • 在 ORDER BY 之前没有那个',',我得到一个空返回集,但没有错误。
  • 抱歉,忘记添加外部关键字了..再试一次?
  • 谢谢,但仍然没有返回任何内容。不过,我很欣赏这些尝试。
猜你喜欢
  • 2015-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 2011-12-12
相关资源
最近更新 更多