mysql - 如何获取MYSQL中多个相关表中至少一个表中的数据
问题描述
我需要有关 SQL 的问题的帮助。
我有三个表,Table1、Table2、Table3,它们都有一个“电子邮件”字段,它们相互关联。
另一方面,我有一个包含电子邮件列表的数组,我必须检查它们是否在其中一个表中。这些电子邮件还将它们保存在一个用逗号分隔的字符串中,并带有各自的引号,以便在 IN (....) 中使用它:
$emails = ("'email1@example.com', 'email2@example.com', ....");
SELECT *
FROM Table t1
INNER JOIN Table2 t2 ON t1.email = t2.email
INNER JOIN Table3 t3 ON t1.email = t3.email
WHERE (t1.email IN ($ emails)) OR (t2.email IN ($ emails) ) OR (t3.email IN ($ emails));
在前面的示例中,我意识到在执行 INNER JOIN 时,我通过电子邮件字段匹配表,该字段在所有表中都没有值。可能是电子邮件不在某个表中,但在另一个表中是的,所以我需要一个 SQL 查询,以便获得 3 个表中的任何一个中的电子邮件。
有人告诉我,我制作了 emails 数组的临时表,然后在我可以得到它的表之间进行 LEFT JOIN,但我不知道该怎么做。
你能给我一个如何解决这个问题的想法吗?
提前致谢。
解决方案
你需要使用UNION
,而不是JOIN
。
SELECT email, "Table1" AS whichTable
FROM Table1
WHERE email in ($email)
UNION
SELECT email, "Table2" AS whichTable
FROM Table2
WHERE email in ($email)
UNION
SELECT email, "Table3" AS whichTable
FROM Table3
WHERE email in ($email)
在所有查询中使用SELECT *
假设所有表都具有相同顺序的相似列。如果没有,您需要在每个查询中明确列出列。
推荐阅读
- python - Tensorboard 在 Chrome 中显示空白页
- powershell - 正确编辑变量的值
- git - 如何从 github 帐户中删除 ssh 密钥并使用 http 提交
- google-cloud-platform - 想要通过 Terraform 部署 Google Cloud Run 服务
- python - 使用附加依赖项创建 zip 时如何测试 python AWS lambda 函数?本地化
- node.js - 如何通过 REST API 处理 MongoDB 登录?
- javascript - HTML & PHP:错误的按钮对齐和错误的输出
- c++ - 将 HTML 页面的内容获取到文本文件但没有代码。只是纯文本
- javascript - 我被困在一个 JavaScript 函数中,该函数应该计算数组中的所有唯一项
- dart - 飞镖中'catch(e)'和'on Exception catch(e)'之间的区别?