我需要合并一个如下所示,但如果表dbo.Problem在IsValid列中的值为1,我只想这样做。 dbo.Problem通过dbo.Problem.ID = dbo.Delivery.IssueID链接到dbo.delivery。
merge [dbo].[Delivery] as D
using [ReportSvr].[Report].[dbo].[Delivery] as LinkD
on ( D.[ID] = LinkD.[ID])
WHEN NOT MATCHED BY TARGET
THEN INSERT(
[ID]
,[IssueID]
,[column2]
,[column3]
)
VALUES(
[ID]
,[IssueID]
,[column]
,[column]
);
GO
尝试类似的事情;
select d.IssueID, i.IsValid
From Delivery d
left join (Select* From Issue where IsValid = 1) i
on d.IssueID = i.ID
因为第一步必须是能够想要的行。
输出:
IssueID IsValid
1 1
2 NULL
6 NULL
7 1
8 1
9 1
10 NULL
如你所见,我失败了......
我是新的(第二天)SQL,对不起,如果这是一个我应该知道的简单任务。
我希望你能帮助我。
答案 0 :(得分:0)
使用INNER JOIN仅显示Issue表中具有匹配记录的交货。 INNER JOIN仅显示连接字段匹配的记录。在您的尝试中,您将使用LEFT JOIN,它将显示左表中的所有内容,[Delivery](" left"如果您在一行上显示整个查询,则有意义)和匹配的记录右表,[问题]。
SELECT d.IssueID, i.IsValid
FROM Delivery d
INNER JOIN Issue i
ON d.IssueID = i.ID
WHERE i.IsValid = 1
答案 1 :(得分:0)
感谢您帮助我,我设法在Russell Fox的帮助下解决了这个问题。我只想发布答案。
merge [dbo].[Delivery] as D
using(
select d.*, i.IsValid
From [ErrorReportSvr].[ErrorReport].[dbo].[Delivery] d
inner join (Select* From [ErrorReportSvr].[ErrorReport].[dbo].[Issue] where IsValid = 1) i
on d.IssueID = i.ID
) as LinkD
on ( D.[ID] = LinkD.[ID])
WHEN NOT MATCHED BY TARGET
THEN INSERT(
[ID]
,[IssueID]
,[column2]
,[column3]
)
VALUES(
[ID]
,[IssueID]
,[column2]
,[column3]
);
GO