我正在使用Mysql存储一些记录(不会超过150,200)。 Sql服务器在处理查询时非常快速和优化,但我的问题是连接速度慢且延迟高,我不想执行比绝对需要更多的查询。我的表格如下:
some_table:
ID Name Start Duration
-----------------------------
1 rec1 0 15
2 rec2 0 25
3 arc3 15 15
4 rac4 30 30
ignore_table:
ID rec_id day
----------------
1 2 0
2 3 1
3 3 2
我想从some_table
中选择所有记录,除了那些在给定日期应该被忽略的记录(这实际上是整个查询中唯一不同的记录)。
假设当前日期为1,那么我想执行一些将返回的查询:
ID Name Start Duration
-----------------------------
1 rec1 0 15
2 rec2 0 25
4 rac4 30 30
由于ignore_table
中的第2条记录,删除了ID为3的记录 - 它表示在第一天我们应该忽略ID等于3的记录。
我曾经从some_table
中选择所有记录,然后分别检查每一条记录,看它们是否应该被忽略。这适用于localhost上的大量数据,但在真实的应用程序中,我真的更喜欢更快的东西。
提前致谢:)
答案 0 :(得分:2)
您需要以下内容:
SELECT s.* FROM some_table s
LEFT JOIN ignore_table i ON s.ID = i.rec_id AND i.day = 1
WHERE i.ID IS NULL;
或者:
SELECT s.* FROM some_table s
WHERE s.ID NOT IN (
SELECT i.rec_id FROM ignore_table i WHERE i.day = 1
);
答案 1 :(得分:1)
使用subselect:
SELECT *
FROM some_table
WHERE id NOT IN (SELECT rec_id
FROM ignore_table
WHERE day = 2)