【问题标题】:LEFT JOIN not returning desired resultsLEFT JOIN 没有返回想要的结果
【发布时间】:2020-05-10 04:27:34
【问题描述】:

我有两个查询,每个查询的输出如下所示:

SELECT UserID, ActivityDate, ActivityDay, ActivityTime
FROM Activities 
WHERE ActivityType='MYS'

SELECT USerID, TimeFrom, TimeTo, ActivityDay
FROM [dbo].[userActivities]  WHERE UserID=123

预期结果:

这两个查询可以使用以下链接:

  • Activity.UserID = userActivities.UserID
  • Activity.ActivityDay = userActivity.ActivityDay

我需要从第一个数据集中获取所有 4 行,并且需要添加的新列基于第二个查询中的值。 ActvityDay 7 有两条记录,因为在下一个查询中有两条记录为 ActvityDay 7

我试图使用LEFT JOIN 提取数据,但没有得到想要的结果。有人可以告诉我我做错了什么吗?

我正在尝试的查询:

SELECT DISTINCT AD.UserID, AD.ActiityDate, AD.ActivityDay, AD.ActivityTime,
CASE WHEN AD.ActiityDate = userActivities.ActivityDay THEN 'Yes' ELSE 'No' END AS [ActivityExists],
CASE WHEN AD.ActiityDate = userActivities.ActivityDay THEN UA.TimeFrom ELSE '' END AS [Time],
FROM Activities AD LEFT JOIN userActivities UA ON AD.UserID=UA.UserID 
AND AD.ActiityDate = userActivities.ActivityDay

【问题讨论】:

  • ActivityDateActivityDay 似乎不适合直接比较。半相关,你应该可以使用UA.UserID IS NULL作为第一种情况的条件。
  • 请不要使用图片,将数据格式化为文本。
  • 请在代码问题中给出minimal reproducible example--剪切&粘贴&运行代码;具有期望和实际输出(包括逐字错误消息)的示例输入(作为初始化代码);标签和版本;明确的规范和解释。对于包含最少代码的错误,您可以给出的代码是您显示的代码可以通过您显示的代码扩展为不正常。 (调试基础。)How to Ask 适用于包括 DBMS 和 DDL 的 SQL,其中包括约束、索引和表格初始化。隔离第一个意外子表达式及其输入和输出。 (调试基础。)询问一下。

标签: sql-server join left-join ssms


【解决方案1】:

您的联接和 CASE 表达式基于错误的列。
此外,由于您为表使用别名,因此请使用别名并且不要混合表名和别名。
试试这个:

SELECT DISTINCT 
  AD.UserID, AD.ActivityDate, AD.ActivityDay, AD.ActivityTime,
  CASE WHEN AD.ActivityDay = UA.ActivityDay THEN 'Yes' ELSE 'No' END AS [ActivityExists],
  CASE WHEN AD.ActivityDay = UA.ActivityDay THEN UA.TimeFrom ELSE '' END AS [Time]
FROM Activities AD LEFT JOIN userActivities UA 
ON AD.UserID=UA.UserID  AND AD.ActivityDay = UA.ActivityDay

请参阅demo
结果:

> UserID | ActivityDate | ActivityDay | ActivityTime | ActivityExists | Time    
> -----: | :----------- | ----------: | :----------- | :------------- | :-------
>    123 | 2020-01-20   |           1 | 2:20 PM      | No             |         
>    123 | 2020-01-23   |           4 | 2:54 PM      | No             |         
>    123 | 2020-01-24   |           5 | 3:06 PM      | Yes            | 9:10 AM 
>    123 | 2020-01-28   |           7 | 11:00 AM     | Yes            | 11:15 AM
>    123 | 2020-01-28   |           7 | 11:00 AM     | Yes            | 12:05 PM

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 2013-11-28
    • 1970-01-01
    • 2019-09-06
    • 2015-02-24
    相关资源
    最近更新 更多