如何改进试图从两个表中查找不同值的MySql查询?

如何改进试图从两个表中查找不同值的MySql查询?,mysql,distinct,Mysql,Distinct,编写上述查询是为了将tb1的属性(source_IP和timestamp)与tb2中的相同属性进行比较,并仅选择属于tb1的不同属性。然而,这个查询工作得很好,但是我正在寻找更好的方法来提高效率,因为语句中有三个查询。请提供任何建议。您可以使用不存在。像这样: SELECT distinct source_IP, timestamp FROM tb1 , tb2 WHERE tb1.source_IP not in ( SELECT source_IP FROM tb2 WHERE tb1

编写上述查询是为了将tb1的属性(source_IP和timestamp)与tb2中的相同属性进行比较,并仅选择属于tb1的不同属性。然而,这个查询工作得很好,但是我正在寻找更好的方法来提高效率,因为语句中有三个查询。请提供任何建议。

您可以使用
不存在
。像这样:

SELECT distinct  source_IP, timestamp FROM  tb1 , tb2 WHERE tb1.source_IP 
not in ( SELECT source_IP FROM tb2 WHERE tb1.source_IP = tb2.source_IP) 
AND tb1.timestamp not in 
( SELECT timestamp FROM tb2 WHERE tb1.timestamp = tb2.timestamp )

谢天谢地,这个问题很有效:

SELECT DISTINCT 
   tb1.source_IP, 
   tb1.timestamp 
FROM 
   tb1 
WHERE NOT EXISTS
   (SELECT NULL FROM tb2 
    WHERE tb1.source_IP=tb2.source_IP AND tb1.timestamp=tb2.timestamp)
感谢Roee Adler

谢谢,它工作正常,但使用“存在”而不是“不存在”,因为如果发现任何相似性,它将返回NULL。您是指
选择NULL
。你可以在那里得到你想要的任何东西
选择1
选择“啧啧”
或任何东西
SELECT source_IP, timestamp FROM tb1 WHERE  source_IP NOT IN (SELECT source_IP FROM tb2) 
AND timestamp NOT IN (SELECT timestamp FROM tb2)