我想知道执行以下查询的最有效方法。我有2张桌子:
CREATE TABLE Table1 (
Table1Id INT NOT NULL PRIMARY KEY
);
go
CREATE TABLE Table2 (
Table2Id INT NOT NULL PRIMARY KEY,
EndDate DATE NULL,
Table1Id INT NOT NULL
);
go
我想知道表2中没有的所有Table1ID,或者如果它们在表2中,它们必须在当前日期之前有一个EndDate。
我知道我可以做正确的加入,但不知道如何处理EndDate文章。任何帮助将不胜感激。谢谢。
答案 0 :(得分:0)
我会分两部分来看。首先,从char* LeadingSpace(char *line) {
while (strchr(" \t\r\n", line[0])) {
line++;
}
return line;
}
获取表2中没有的所有记录。这是通过左连接完成的:
Table1
对于下一部分,您希望来自SELECT DISTINCT t1.*
FROM dbo.Table1 t1
LEFT JOIN dbo.Table2 t2
ON t1.Table1Id = t2.Table1Id
WHERE t2.Table2Id IS NULL
的记录与Table1
匹配,但在当前日期之前为Table2
。 EndDate
已经返回LEFT JOIN
中匹配Table1
的记录,我们只需要修改Table2
子句以检查WHERE
if { {1}}不为空。这将给出最终查询:
EndDate
答案 1 :(得分:0)
以下应该可以很好地运作:
Select distinct Table1Id from Table1 left join Table2 using (Table1Id)
where Table2Id is null or EndDate < now();
也许您需要在MSSQL上用using (Table1Id)
替换on (Table1.Table1Id = Table2.Table1Id)
。