【问题标题】:MSSQL Query Not Returning Null Columns/ResultsMSSQL 查询不返回空列/结果
【发布时间】:2017-12-09 03:14:42
【问题描述】:

我对 SQL 查询有点陌生,所以这可能很容易解决,但我似乎找不到任何答案。

我有一堆相关的表格。例如。 SPClients 包含 iClientID 和 sName,SPDocTypes 包含 iDocTypeID 和 sName,SPCreditor 包含 iCreditorID 和 sName

然后

SPDocIndex 包含 iIndexID,然后是上面列出的 iClientID、iDocTypeID 和 iCreditorID 的外键。

如果我执行一个简单的 SELECT * FROM SPDocIndex,我会得到所有结果,只显示 ID,这在绑定到数据网格时没有多大用处。所以我使用了一个内部连接,这样实际的名字就会出现,而不仅仅是他们的 ID,就像这样:

SELECT * FROM SPDocIndex
INNER JOIN SPClients ON SPDocIndex.iClientID=SPClients.iClientID
INNER JOIN SPDocType ON SPDocIndex.iDocTypeID=SPDocType.iDocTypeID
INNER JOIN SPCreditor ON SPDocIndex.iCreditorID=SPCreditor.iCreditorID

查询“有效”,但它只返回在所有三列中都有数据的行。如果 SPDocIndex 的 iCreditorID 列为空,则不返回该行……但我希望无论列是否为空,都返回所有行。

【问题讨论】:

  • 试试LEFT JOIN
  • 添加 isnull(SPDocIndex.iCreditorID,'')=isnull(SPCreditor.iCreditorID,'') 并检查是否有效
  • @jarlh - 谢谢。那成功了!我不知道 LEFT、RIGHT、INNER 等之间有什么区别(显然......)
  • @mjwills - 是的,这就是我的意思。对不起! :)

标签: c# sql sql-server inner-join


【解决方案1】:

Benny - 其他一些人在 cmets 中回应说,您需要将连接调整为 left 连接,而不是 inner 连接;确实,这里就是这种情况。请查看此链接以获取有关 SQL 连接之间差异的快速教程。
https://www.w3schools.com/sql/sql_join.asp

【讨论】:

    【解决方案2】:
    Inner Join will always return the return the matching records within two table. In order  to get the all the records from first table and matching record of second table you must use left join as shown below. Please try below and let me know if you have any further issues.
    
    SELECT * FROM SPDocIndex
    LEFT JOIN SPClients ON SPDocIndex.iClientID=SPClients.iClientID
    LEFT JOIN SPDocType ON SPDocIndex.iDocTypeID=SPDocType.iDocTypeID
    LEFT JOIN SPCreditor ON SPDocIndex.iCreditorID=SPCreditor.iCreditorID
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-18
      • 2021-11-20
      • 2019-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多