在WHERE上用"不在"和?

Edw*_*ard 4 mysql

我试图更好地理解"不在"中如何使用MySQL中的WHERE.

例如:

SELECT * FROM current_mailing_list 
WHERE address1 NOT IN
    (select address1 from old_mailing_list) AND
    city not in (select city from old_mailing_list);
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,查询的目的是列出新的邮件地址.address1是一个街道地址,如1234 N. Main St.当1234 N. Main St发生在多个城市时会发生问题.所以我决定添加city它以使它更独特.

我的问题是,这是做我期望它做的吗?意思是,它应该找到old_mailing_list AND中不存在的那些街道地址(地址1),然后确保它们有不同的地址city.

我已经完成了这个,只是使用address1:

SELECT * FROM current_mailing_list 
WHERE address1 NOT IN 
    (select address1 from old_mailing_list);
Run Code Online (Sandbox Code Playgroud)

它产生了一个更大的列表(大约10倍).所以我想补充city一点.或者我的逻辑是完全错误的还需要另一种方法吗?

Ant*_*t P 6

您当前的查询不会返回其中或者他们的"地址1"或"城市"出现新的地址在所有旧的邮件列表.我想你想选择不同时出现的城市,如下:

SELECT *
FROM current_mailing_list c
WHERE NOT EXISTS
(
    SELECT 1
    FROM old_mailing_list
    WHERE
        address1 = c.address1
        AND city = c.city
)
Run Code Online (Sandbox Code Playgroud)

毫不夸张的说; 选择当前邮件列表中的所有内容,其中旧邮件列表中没有记录具有相同的城市和地址1.