试图找出如何编写SQL查询以返回mysql数据库中两个表的不相交,但遇到了问题
很抱歉,我完全不知道,但我正在尝试为以下涉及mysql数据库的问题编写SQL,我不知所措 问题出在这里。鉴于以下两个表格:试图找出如何编写SQL查询以返回mysql数据库中两个表的不相交,但遇到了问题,mysql,sql,database,Mysql,Sql,Database,很抱歉,我完全不知道,但我正在尝试为以下涉及mysql数据库的问题编写SQL,我不知所措 问题出在这里。鉴于以下两个表格: **Table1** PID WEBSITE COMP_SITE KEYCODE SITE_TYPE KEYWORDS 14 google.com bing.com w3874yf8 alpha happy+campers 26 radio.com alice.com 98ygdsfg beta
**Table1**
PID WEBSITE COMP_SITE KEYCODE SITE_TYPE KEYWORDS
14 google.com bing.com w3874yf8 alpha happy+campers
26 radio.com alice.com 98ygdsfg beta slip+slop
13 simon.com fat.org 98dfyg77 delta sunrise
**Table2**
PID WEBSITE KEYWORDS
14 google.com happy+campers
14 yahoo.com fat+albert
14 aol.com chump+change
我需要一个查询来返回表1中的每一行,表2中没有与该行的相同块(ID、网站、关键字)匹配的行。在上面的示例中,此查询将返回表1的第2行和第3行
请注意,两个表中都没有包含该表唯一值的列,尽管行的ID/WEBSITE/KEYWORDS块是唯一的
我觉得我把事情弄得比实际情况复杂得多/ 有两种常见的方法来解决这个问题。第一个是
左外连接
。使用此构造匹配所有行,将行保留在第一个表中,然后筛选出匹配的行:
select * from Table1 as t1
left join Table2 as t2
on t1.PID =t2.PID
and t1.WEBSITE =t2.WEBSITE
and t1.KEYWORDS = t2.KEYWORDS
where t2.PID is null
select t1.*
from table1 t1 left outer join
table2 t2
on t1.PID = t2.PID and
t1.WEBSITE = t2.WEBSITE and
t1.KEYWORDS = t2.KEYWORDS
where t2.PID is null;
第二种方法是不存在:
select t1.*
from table1 t1
where not exists (select 1
from table2 t2
where t1.PID = t2.PID and
t1.WEBSITE = t2.WEBSITE and
t1.KEYWORDS = t2.KEYWORDS
);
这两种方法都可以利用表2上的索引:
create index table2_PID_WEBSITE_KEYWORDS on table2(PID, WEBSITE, KEYWORDS);
哇,添加索引后,查询时间从~2分钟增加到~2秒。再次感谢!