簡體   English   中英

PHP-SQL-內部聯接不起作用

[英]PHP - SQL- inner join not working

我的數據庫中有3個表

第一個表名:savedemail

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

次表名稱:凌空

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

第三表名:macadd

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

我想做的是比較saveemail表的每一行電子郵件與volley表的每一行電子郵件。 如果電子郵件匹配,那么我想將凌空的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')

請嘗試以下查詢:

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
)

說起來有點困難,我相信您已經明白了要點,但是大多數情況下,您會從saveedmail中選擇所有電子郵件,其中該表中的電子郵件值與凌空表中的一個匹配,並且只要mac不匹配即可。在macadd表中不存在,請將該mac附加到macadd表中。

免責聲明:我的MySQL知識是有限的,因此我幾乎可以肯定地向您保證,有更快/更少資源的方式來做到這一點。 但是,以上方法在我的測試中確實有效。

這是使用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

另外,您可以使用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
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM