1

我对 SQL 有非常基本的了解,但是为了处理大量数据,我需要使用它。这是我的问题:

我有两张表,如下:

table1:
id    begin    end
100   1998     2013
101   1996     2009

table2:
id    date     price    qtt
100   1996     10       200
100   1999     12       200
101   1997     13       100
101   2013     14       100

我需要做的是擦除date小于begin字段或date大于end每个 id 的行。这意味着对于id101,任何记录的日期都不应在 1996 年之前或 2009 年之后。

所以我的预期结果是:

id    date     price    qtt
100   1999     12       200
101   1997     13       100

效率是一个问题,因为我正在为具有数百万条记录的表执行此操作。我已经为这些表准备了一个 sqlfiddle,这样对你来说更容易。

http://sqlfiddle.com/#!2/66f54f/1

如果这个问题太简单了,我很抱歉,但是在搜索了三个小时后,我自己无法解决。先感谢您!

4

2 回答 2

3

以下是您想要执行的标准 SQL 语法:

delete from table2
    where not exists (select 1
                      from table1
                      where table1.id = table2.id and
                            table2.date between table1."begin" and table1."end"
                     );

请注意,如果 anid存在于table2但不存在table1,则其所有行都id将被删除。

如果您在table1(id, date).

于 2014-03-18T20:50:39.820 回答
0

尝试这个...

DELETE FROM A
FROM TABLE2 A
inner join table1 B
on A.id=B.id
and (A.[DATE] BETWEEN B.[BEGIN] AND B.[End])
于 2014-03-18T20:57:01.450 回答