如何通过一个查询检查多个表中是否存在行?
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
我有三个表,我想查看其中任何一个表中是否存在一行。
这是我的三个问题。如何将它们合二为一?
$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