【问题标题】:Select using LEFT OUTER JOIN with condition选择使用带有条件的 LEFT OUTER JOIN
【发布时间】:2015-02-23 13:21:16
【问题描述】:

我有两张表Table ATable B

表 A

1. *id*
2. *name*

表 B

1. *A.id*
2. *datetime*

我要选择

1. *A.id*
2. *A.name*
3. *B.datetime*

即使表 B 不包含特定日期的 A.id 行,它也应该用 NULL

替换该列

例如

表A包含

1. *(1 , Haris)*
2. *(2, Hashsim)*

表 B 包含今天日期的以下内容。

1. *(1, '2014-12-26 08:00:00')*

我应该显示 2 个 ID 为 12 的结果,而不仅仅是 ID 1

使用带有 WHERE 子句的 LEFT OUTER JOIN 使其成为 LEFT INNER JOIN,如何解决这个问题?

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:
    SELECT a.id, a.name, b.datetime
    FROM A
    LEFT JOIN B on B.aid = a.id
    WHERE coalesce(B.datetie, '1900-01-01') < @MyDateTime
    

    【讨论】:

    • 我想要它在特定日期,如果我添加 WHERE B.datetime
    【解决方案2】:

    使用LEFT OUTER JOINLeft table 获取所有行,不匹配的行将在Right table 列中具有NULL

    SELECT A.id,
           A.name,
           B.[datetime]
    FROM   tableA A
           LEFT OUTER JOIN tableB B
                        ON A.Id = B.id
                           AND B.[datetime] < @date 
    

    【讨论】:

    • 如果我将 WHERE 添加到特定日期时间的查询中,它只会显示存在的,例如WHERE B.datetime
    • @HarisMehmood 是的,通过将 where 子句 WHERE B.datetime &lt;= 'myDateTime'转换 left joininner join
    • 是的,我发现这很明显,有解决办法吗?
    • @HarisMehmood change left Join 条件 ..tableA A Left outer join tableB B on A.Id = B.id and b.datetime &lt; @date..
    • @HarisMehmood - 更新了答案,顺便说一句,您应该根据条件更新您的问题
    【解决方案3】:
    SELECT A.id, A.name, b.datetime
    FROM A
    LEFT Outer JOIN B on B.id = A.id
    

    【讨论】:

      【解决方案4】:
      Select A.id,A.name,B.datetime 
      from tableA A 
      Left join
      (
         SELECT B.ID,B.datetime 
         FROM tableB B
         WHERE B.datetime <= 'myDateTime'
      )B
      ON A.aid = B.id
      

      【讨论】:

        猜你喜欢
        • 2011-11-01
        • 1970-01-01
        • 2014-03-16
        • 2020-03-11
        • 1970-01-01
        • 1970-01-01
        • 2011-01-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多