不是最好的sql,但我正在努力编写这个查询。情况是我有一个项目表。如果该项目已过时,那么该项目已经过时了。并且有一个替换ID然后在查询中我应该选择该替换项而不是已经过时的项。以下是我所拥有的和一些图片,以使其更清晰。
select
o.ReplacementItemID,
o.ItemStatus,
o.Description,
o.ItemWarrantyID,
o.Id as OriginalItemId
from
(
select
id,
ItemStatus,
Description,
ItemWarrantyID,
ReplacementItemID
from item
where ItemStatus = 'obso'
)o
inner join Item i
on o.ReplacementItemID = i.Id
这是不正确的保修ID应该是110,如下面的两个例子:
答案 0 :(得分:1)
正如评论中提到的sgeddes,您引用了错误的ItemWarrantyID。你...
from
(
select
id,
ItemStatus,
Description,
ItemWarrantyID,
ReplacementItemID
from item
where ItemStatus = 'obso'
)o
是关于原始的。之后的部分......
inner join Item i
on o.ReplacementItemID = i.Id
这样做只能看到有替换件的部件。问题是您只使用原始文件,同时过滤掉所有没有替换的行。
所以你...
select
o.ReplacementItemID,
o.ItemStatus,
o.Description,
o.ItemWarrantyID,
o.Id as OriginalItemId
应该......
select
o.ReplacementItemID,
o.ItemStatus,
o.Description,
i.ItemWarrantyID,
o.Id as OriginalItemId
假设您只是在寻找原件(您似乎是基于where ItemStatus = 'obso'
和inner join
以及许多其他事情)