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

问题描述 投票:0回答:1

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

这是我的三个问题。我怎样才能将它们组合成一个?

$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
}
php mysql select pdo where
1个回答
1
投票

您可以使用UNION查询。如果用户在多个表中具有不同的id值,则这将返回多行,但由于您只需要知道是否存在一行或多行。

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

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

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

如果您有兴趣知道电子邮件地址所在的表,您可以修改UNION查询以返回该信息:

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
© www.soinside.com 2019 - 2024. All rights reserved.