涉及多个表的查询:INNER JOIN 排除了一些行
Posted
技术标签:
【中文标题】涉及多个表的查询:INNER JOIN 排除了一些行【英文标题】:Query involving multiple tables: INNER JOIN excludes some rows 【发布时间】:2015-10-05 10:39:21 【问题描述】:我有 1 个包含 12 列的大表,其中 4 个列具有以下字段:VersionID、StatusID、Owner ID 等。
我有 3 个用于 Version、Status 等的小表...该表包含以下信息:“VersionID “1 = Active”;VersionID 2 = Disabled...etc” StatusID 和 OwnerID 也是如此。 我创建了一个查询,它显示来自“大表”的信息,并且应该从较小的表中显示 VersionID、StatusID 等中包含的信息,例如:如果在大表中显示的 VersionID 为“1”我希望它显示定义..在这种情况下为“活动”。
我设法通过使用以下代码做到了这一点:
SELECT
Object.Type, Object.ID, Object.Key, Object.IsInactive,
Version.Version AS VersionID,
Status.StatusText AS StatusID,
ObjectDetail.BalancePosition, ObjectDetail.FrequencyID,
ObjectDetail.FrequencyTimeLagID, ObjectDetail.ObjectName,
ObjectDetail.Description, ObjectDetail.ValueSpecification,
ObjectDetail.Computation, ObjectDetail.StorageSystemID,
ObjectDetail.StorageSystemField, ObjectDetail.TableFunctionalDatamodel,
ObjectDetail.OwnerID
FROM
Version
INNER JOIN
(
[Object]
INNER JOIN
(
ObjectDetail
LEFT JOIN
Status
ON ObjectDetail.[StatusID] = Status.[ID]
)
ON Object.ID = ObjectDetail.ObjectID
)
ON Version.ID = ObjectDetail.VersionID
WHERE (((Object.Type)=0) AND ((Object.ID) Is Null))
OR (((Object.Type)=0) AND ((Object.Key) Is Null))
OR (((Object.Type)=0) AND ((Object.IsInactive) Is Null))
OR (((Object.Type)=0) AND ((Version.Version) Is Null) AND ((ObjectDetail.VersionID) Is Null))
OR (((Object.Type)=0) AND ((Status.StatusText) Is Null))
OR (((ObjectDetail.BalancePosition) Is Null))
OR (((ObjectDetail.FrequencyID) Is Null))
OR (((ObjectDetail.FrequencyTimeLagID) Is Null));
这工作得很好,问题是像我们这样的错误条目“999”在StatusID - “999”在小表中没有定义..没有显示。我希望查询只显示小表中没有条目或没有定义的条目的字段。
【问题讨论】:
请格式化查询... 【参考方案1】:所以您基本上不想在其列中找到具有无效值的行?
您可以通过使用left join
来实现这一点,并且只包括null
结果:
SELECT a.x, b.y FROM BigTable a
LEFT JOIN SmallTable1 b ON b.id = a.id
WHERE b.id IS NULL
【讨论】:
嗨,是的,这是正确的.. 我试过这个:SELECT VersionID.ObjectDetail, ID.Version FROM ObjectDetail INNER JOIN Version ON Version.ID = VersionID.ID WHERE VersionID.id NOT IN (SELECT id FROM Version);
但不知何故我得到了一个错误..
@GordThompson,是的,我刚刚看到,将其删除,谢谢 :)
这有帮助,我终于明白了:) 谢谢。以上是关于涉及多个表的查询:INNER JOIN 排除了一些行的主要内容,如果未能解决你的问题,请参考以下文章
SQL----Inner Join Outer JoinCross Join理解
表的基本查询语句及使用连表(inner joinleft join)子查询