Mysql sql在不同表中的两列中查找值

Mysql sql在不同表中的两列中查找值,mysql,sql,mariadb,Mysql,Sql,Mariadb,如何搜索值e。G不同列的多个表中的电子邮件地址?还是优化我的查询 我的例子 $email = 'some_email@example.com'; $email = "SELECT a.email_one, a.email_two,b.email_three FROM first_table AS a, second_table AS b WHERE a.email_one = $email OR b.email_two = $email"; 谢谢大家! 选择a.email\u one,b

如何搜索值e。G不同列的多个表中的电子邮件地址?还是优化我的查询

我的例子

$email = 'some_email@example.com';

$email = "SELECT a.email_one, a.email_two,b.email_three 
FROM first_table AS a, second_table AS b 
WHERE a.email_one = $email OR b.email_two = $email";

谢谢大家!

选择a.email\u one,b.email\u two
从作为内部联接的第一个\u表到作为b的第二个\u表

在a.email\u one=b.email\u two和a.email\u one='“$email.”

上,如果它可以出现在两个表中,但两个表之间没有相关数据,只需在来自两个表的查询之间使用
UNION

SELECT a.email, 'from-first-table' from first_table a where ...
UNION 
SELECT b.email, 'from-second-table' from second_table b where ...

在列之间散开一个数组(在您的例子中是电子邮件)几乎总是一个糟糕的模式设计。相反,在一个额外的表中使用多行:

SELECT ...
    FROM Main
    JOIN Emails  USING(user_id)
    WHERE Emails.email = '$email';

Emails:  INDEX(email, user_id)

效率很高;允许每个用户发送0、1、2或2封以上的电子邮件。

添加一些示例表数据和预期结果-作为格式化文本(而不是图像)。也许
UNION ALL
?因此,我更正了代码。对于UNION,我需要有相同数量的列。我的查询与此不同。您应该使用内部联接,并在条件下等于
中的所有电子邮件列。请检查我的答案。谢谢,我已经更正了我的代码,现在有点不同了。我应该检查三根柱子。