如何通过一个查询检查多个表中是否存在行?

How can I check if row exists in multiple tables with one query?

我有三个表,我想查看其中任何一个表中是否存在一行。

这是我的三个问题。如何将它们合二为一?

$dbh->prepare("SELECT id FROM users WHERE email = :email");
$dbh->prepare("SELECT id FROM employees WHERE email = :email");
$dbh->prepare("SELECT id FROM teachers WHERE email = :email");

if(!$row) { // If row not found
    // continue with registration
}

您可以使用 UNION 查询。如果用户在多个 table 中有不同的 id 值,这将 return 多行,但是因为您只需要知道是否存在一行或多行就可以了。

SELECT id FROM users WHERE email = :email
UNION
SELECT id FROM employees WHERE email = :email
UNION
SELECT id FROM teachers WHERE email = :email

或者,您可以使用 EXISTS 表达式从查询中获得简单的 yes/no 结果:

SELECT EXISTS (SELECT * FROM users WHERE email = :email)
    OR EXISTS (SELECT * FROM employees WHERE email = :email)
    OR EXISTS (SELECT * FROM teachers WHERE email = :email)

如果您有兴趣知道电子邮件地址在哪个 table 中,您可以将 UNION 查询也修改为 return 该信息:

SELECT 'users' AS `table`, id FROM users WHERE email = :email
UNION
SELECT 'employees', id FROM employees WHERE email = :email
UNION
SELECT 'teachers', id FROM teachers WHERE email = :email