SQL效率查询

时间:2015-12-12 18:59:12

标签: sql sql-server

我想知道执行以下查询的最有效方法。我有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文章。任何帮助将不胜感激。谢谢。

2 个答案:

答案 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匹配,但在当前日期之前为Table2EndDate已经返回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)

相关问题