【问题标题】:sql server - join on null valuessql server - 加入空值
【发布时间】:2011-09-06 02:44:19
【问题描述】:

我有两张桌子。一个有链接列表,另一个有自己的样式(如果有的话)。 后者是一个稀疏表,即当它们的值为空时它没有对应的行。 我运行以下查询:

select hl.*, hls.colorCode, hls.bold
from HeaderLinks hl, HeaderLinkStyles hls 
where hl.LinkId = hls.linkID
order by row asc, [column] asc

我想对此进行修改,以便如果特定记录不存在某一行,这些列将在结果集中接收空值。

谢谢!

【问题讨论】:

  • 以视觉方式获取有关加入的更多信息:stackoverflow.com/questions/3308122/… 我也已经粘贴了我的答案
  • 停止使用隐式连接。他们是非常糟糕的编程实践,并在 1992 年被替换!

标签: sql sql-server tsql sql-server-2008 left-join


【解决方案1】:

Left Join

Select hl.*, hls.colorCode, hls.bold 
From HeaderLinks hl
Left Join HeaderLinkStyles hls on hl.LinkId = hls.linkID
order by row asc,[column] ASC

【讨论】:

  • 谢谢!我有一段时间没有使用连接了,我应该重新认识一下:)
  • @Elad Lachmi,您不应该编写不使用显式连接的查询。隐式连接更难以维护,并且由于它们容易创建意外交叉连接而产生更多错误。再也没有理由再写一个隐式连接了。它们只是一种糟糕的编程习惯,就像使用 Go To 一样。
【解决方案2】:

你需要使用左外连接

select hl.*, hls.colorCode, hls.bold
from HeaderLinks hl
    left join HeaderLinkStyles hls on
      hl.LinkId = hls.linkID  
order by row asc, [column] asc

Using Outer Joins

【讨论】:

    【解决方案3】:

    你需要使用左连接

    Select 
      hl.*, 
      hls.colorCode, 
      hls.bold 
    from 
      HeaderLinks hl 
    LEFT JOIN 
      HeaderLinkStyles hls on hl.LinkId = hls.linkID
    order by 
      row asc,[column] ASC
    

    【讨论】:

      【解决方案4】:

      要为不存在的记录获取 NULL,您需要在表上使用 LEFT OUTER JOIN 或 RIGHT OUTER JOIN.......

      Select hl.*, hls.colorCode, hls.bold From HeaderLinks hl
      Left Join HeaderLinkStyles hls on hl.LinkId = hls.linkID order by row asc,[column] ASC
      

      在这里检查加入:Visual Representation of SQL Joins

      【讨论】:

        【解决方案5】:

        当找不到匹配项时,leftfull 连接将用 null 填充一行:

        select  *
        from    HeaderLinks hl
        full outer join
                HeaderLinkStyles hls 
        on      hl.LinkId = hls.linkID 
        

        左连接只用空值填充右手边的表,右连接只用左手边的表填充,而全连接则填充两者。有关视觉插图,请参阅A Visual Explanation of SQL Joins

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-12-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-01-18
          • 1970-01-01
          • 2012-09-11
          相关资源
          最近更新 更多