我有两个postgresql表:
table name column names
----------- ------------------------
login_log ip | etc.
ip_location ip | location | hostname | etc.
我想从login_log
中获取在ip_location
中没有行的每个IP地址。
我尝试了这个查询,但它抛出了一个语法错误。
x一个一个一个一个x一个一个二个x
我还想知道这个查询(经过调整使其工作)是否是用于此目的的性能最好的查询。
4条答案
按热度按时间btqmn9zl1#
基本上有4种技术可以完成这项任务,它们都是标准SQL。
∮ ∮ ∮ ∮ ∮一个月一个月
通常在波斯格雷最快。
还应考虑:
一米一分一秒
有时这是最快的,通常是最短的,通常会产生与
NOT EXISTS
相同的查询计划。短。不容易集成到更复杂的查询中。
注意(per documentation):
除非使用
EXCEPT ALL
,否则消除重复。通常情况下,您需要使用
ALL
关键字,如果您不在乎,仍然使用它,因为它使查询 * 更快 。∮ ∮ ∮ ∮ ∮一米六一分
只有在没有
null
值或者你知道正确处理null
的情况下才好。我不*使用它来达到这个目的。而且,使用更大的表会降低性能。NOT IN
在任一端都带有null
值的"陷阱":针对MySQL的dba.SE上的类似问题:
zfciruhq2#
A.)命令是NOT EXISTS,您缺少“S”。
B.)使用NOT IN代替
js81xvg63#
SELECT * FROM testcases1 t WHERE NOT EXISTS ( SELECT 1 FROM executions1 i WHERE t.tc_id = i.tc_id and t.pro_id=i.pro_id and pro_id=7 and version_id=5 ) and pro_id=7 ;
这里testcases1表包含所有数据和executions1表包含testcases1表中的一些数据。我只检索exections1表中不存在的数据。(甚至我给出了一些条件,你也可以给予。)指定检索数据时不应该存在的条件应该放在括号内。
qltillow4#
这个也可以试试......