MySQL查询内连接逆?

Posted

技术标签:

【中文标题】MySQL查询内连接逆?【英文标题】:MySQL Query Inner Join Inverse? 【发布时间】:2020-06-06 23:07:43 【问题描述】:

我们如何展示内连接的“逆”。例如,我有一个通过支付处理器的客户的实际交易列表,在本例中为“Paypal”,但他们从未单击“返回商家”选项卡,以便我们可以处理他们的用户名和密码。

此脚本显示客户列表中的所有人员及其在用户数据库中的相关位置:

SELECT
`Transactions List`.`Customer Email`,
users.Email,
`Transactions List`.`Transaction ID`,
users.`Name`,
users.Phone
FROM
`Transactions List`
INNER JOIN users ON `Transactions List`.`Customer Email` = users.Email

我想要做的是展示它的反面。即所有迷路的人。它们会出现在 TRANSACTIONS LIST 表中,但不会出现在 USERS 表中。

有人知道如何将这个 mysql 查询转换为 Inverse,以便我们可以快速识别哪些客户没有获得用户帐户?

这里有一篇现有的帖子“Inner join inverse php MySQL”没有得到回答,它提出了类似的问题。可能提问的人不够清楚:Inner join inverse Php mysql

还有 “INNER JOIN”和“OUTER JOIN”有什么区别? What is the difference between "INNER JOIN" and "OUTER JOIN"?

但是这些方法都没有真正做我想让脚本做的事情。

【问题讨论】:

将单词放在引号中并不能明确您没有写出的特殊特定含义。如果你不清晰地表达事物,你就无法沟通、推理或搜索。当明确时,这将是一个常见问题解答。在考虑发布之前,请始终在谷歌上搜索任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,带有和不带有您的特定字符串/名称和站点:***.com 和标签;阅读许多答案。如果您发布问题,请使用一个短语作为标题。请参阅How to Ask 和投票箭头鼠标悬停文本。你可以做什么? minimal reproducible example 我完全按照原样粘贴了 MySQL 软件生成的确切代码。存在“引号”是因为从 CSV 导入表格时,表格名称中有空格而不是下划线。我提供了在给定导入结构的情况下有效的确切语法。我很欣赏您在标题中的一个措辞方面的指导 - 有帮助的是一个示例,说明如何更简洁地编写完全相同的帖子,以便将来我知道最佳做法是什么。 我所说的吓人的引语是在“我们如何展示内连接的‘逆’”中的“逆”。同样,大写也不能说明问题。我所说的部分是您“反转”目标的一部分。 (注意minimal reproducible example 包括输入和结果。)关于常见问题解答,请在此处搜索您自己的短语,无需特定字符串:“它们确实出现在一个表中,但不会出现在另一个表中”。我不知道这是否是你真正想要的,但它会立即影响到许多非常古老的基本问答——这里逐字逐句地回答——在不清楚或重复时不应该发布的答案。 【参考方案1】:

select t.*
from `Transactions List` t
left join users u on t.`Customer Email` = u.email
where u.email is null

鉴于上述语法和上面指定的数据库中表的名称,这是正确的答案。感谢 GMB 回答问题。对于其他读者,请记住,如果您的数据库表在其名称或字段名称中包含空格,那么您必须使用 scare quotes 来标识您的表或字段名称。这通常在从 3rd 方工具将表导入 MySQL 时使用。

【讨论】:

【参考方案2】:

我要做的是向 [...] 显示所有 [...] 出现在 TRANSACTIONS LIST 表中但未出现在 USERS 表中的人。

你可以使用not exists:

select t.*
from transactions_list t
where not exists (
    select 1 from users u where t.customer_email = u.email
)

另一种表达方式是使用反left join(这更符合您的问题的精神,与连接有关):

select t.*
from transactions_list t
left join users u on t.customer_email = u.email
where u.email is null

这意味着:尝试与用户加入每个事务,并过滤那些不匹配的事务。

【讨论】:

以上是关于MySQL查询内连接逆?的主要内容,如果未能解决你的问题,请参考以下文章

EasyClick 之 MySQL 连接查询

MySQL连接查询之内连接左连接右连接自连接

MySQL进阶 — 联合查询(外连接内连接子连接合并查询)

MySQL进阶 — 联合查询(外连接内连接子连接合并查询)

MySQL进阶 — 联合查询(外连接内连接子连接合并查询)

Mysql中的关联查询(内连接,外连接,自连接)