PHP - SQL- 内部连接不起作用


PHP - SQL- inner join not working

我在数据库中有 3 个表

名字 : 保存的电子邮件

ID    email
================
1     user.com
2     xy.com
3     user2.com

第二桌名称:凌空抽射

mac        email
===================
12345     hhhhh.com
22222     user2.com
33333     ggggg.com

第三表名称:马卡德

 mac
=========
00000
00000
22222

我正在尝试做的是将保存电子邮件表的每一行电子邮件与凌空表的每一行电子邮件进行比较。 如果电子邮件匹配,那么我想将凌空的Mac存储到MacAdd表的Mac(如果它已经不存在)。

下面的我的代码没有向表插入任何内容,也没有错误''警告

这是我正在使用的查询

SELECT savedemail.email , volley.mac , volley.email
FROM savedemail
INNER JOIN volley
ON savedemail.email=volley.email
WHERE savedemail.email=volley.email REPLACE macadd (mac)
VALUES ('volley.mac')

以下是使用outer join / null检查方法的一个选项:

insert into macadd
select v.mac
from savedemail s 
    join volley v on s.email = v.email
    left join macadd m on v.mac = m.mac
where m.mac is null
  • SQL 小提琴演示

或者您可以使用not exists,但根据我对mysql查询的经验,outer join / null检查通常会胜过它。

insert into macadd
select v.mac
from savedemail s 
    join volley v on s.email = v.email
where not exists (
    select 1
    from macadd 
    where mac = v.mac
)
  • 更多小提琴

请尝试以下查询:

INSERT INTO macadd (mac)
SELECT volley.mac 
FROM volley 
WHERE volley.email = (
    SELECT email 
    FROM savedemail 
    WHERE email = volley.email
    AND (
        SELECT count(mac) FROM macadd WHERE macadd.mac = volley.mac
    ) = 0
)

有点难以用语言表达,我相信你明白它的要点,但大多数情况下,你会从保存的电子邮件中选择所有电子邮件,其中该表中的电子邮件值与凌空表中的电子邮件值匹配,只要该 macd 不存在在 macadd 表中,将该 mac 附加到 macadd 表中。

免责声明:我的MySQL知识有限,所以我几乎可以肯定地向你保证有更快/更少资源密集的方法可以做到这一点;但是,上述方法在我的测试中确实有效。