PHPMYADMIN:EXISTS子句中的访问字段

xcitsw88  于 2022-11-09  发布在  PHP
关注(0)|答案(1)|浏览(134)

我确信这只是一个打字错误,但是如何在PHPMyAdmin中正确地编写下面的查询呢?

SELECT DISTINCT `email_address` as tmp1 
FROM `already_customer_checks` 
WHERE `is_customer` = 0 
AND NOT EXISTS (
                    SELECT * 
                    FROM `already_customer_checks` 
                    WHERE `email_address` = tmp1 
                    AND `is_customer` = 1
                )

错误:#1054 -where子句中的未知表字段'tmp 1'
背景:我要取得所有电子邮件地址,这些电子邮件地址中的'is_customer' = 0,而且在数据表中没有其他'is_customer' = 1的电子邮件地址。
非常感谢你提前!

1sbrub3j

1sbrub3j1#

要使用子查询执行此操作,您需要将别名tmp1放在表上,而不是列上。然后:

SELECT DISTINCT `email_address`
FROM `already_customer_checks` as tmp1 
WHERE `is_customer` = 0 
AND NOT EXISTS (
    SELECT * 
    FROM `already_customer_checks` 
    WHERE `email_address` = tmp1.`email_address`
    AND `is_customer` = 1
)

您还可以考虑@kmoser提出的注解,它 * 可能 * 更有效,但不够清晰。根据MySQL文档:
LEFT [OUTER] JOIN可能比等效的子查询更快,因为服务器可能能够更好地优化它-这并不是MySQL Server独有的事实。
但是,如果使用@kmoser提出的SQL,您可能不希望将email_address列的别名设置为tmp1

相关问题