【发布时间】: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