gpt4 book ai didi

MySQL:在 JOIN 中合并

转载 作者:行者123 更新时间:2023-11-29 02:23:12 26 4
gpt4 key购买 nike

我一直在尝试使用具有多种匹配形式的 COALESCE 创建一个查询,以便连接两个表——但据我所知,它没有奏效。

有人能告诉我这个查询有什么问题吗?

SELECT *
FROM t1
LEFT JOIN t2 ON COALESCE(t1.id,t1.phone,t1.address) = COALESCE(t2.id,t2.phone,t2.address)

类似的东西。希望查询首先查看 t1t2 中的唯一 ID 是否匹配,如果不匹配,它将继续查看是否匹配电话匹配等。如果查询无法尝试匹配多组条件并返回与任何列匹配的条件,并且仅从 t1 返回 NULL,这将非常有帮助根本找不到匹配项。


编辑:

“不起作用”,我的意思是 ID 匹配似乎有效——如果唯一标识符匹配,它将从 t2 返回数据(而不是 NULL),但它没有' 继续尝试匹配电话号码或地址行;这显然很可能是因为 t1 表没有返回任何 NULL 值。

表的定义是 t1 是一个较小的数据子集,可能存在于较大的 t2 表中。假设 t1 是一个大约有 100 人的表,只有几个条件:姓名、电话、地址、id(尽管 ID 并不存在于每一行中)——而 t2 是一个更大的表,大约有 30,000 个,有更多的标准(姓名、电话、地址、ID、工作、志愿者、电子邮件、笔记等),我试图在 30k 中找到 100 个。

最佳答案

我怀疑你想要这个:

SELECT *
FROM t1 LEFT JOIN
t2
ON t1.id = t2.id OR t1.phone = t2.phone or t1.address = t2.address;

如果任何键匹配,这将匹配两行。但是,您可能想要:

SELECT *
FROM t1 LEFT JOIN
t2
ON (t1.id = t2.id) OR
((t1.id is null or t2.id is null) AND t1.phone = t2.phone) or
(((t1.id is null or t2.id is null) and (t1.phone is null or t2.phone is null)) and t1.address = t2.address
)

您的查询可能因多种原因而失败。一种可能性是类型不兼容。另一个是不同的行有不同的 NULL 值分布,所以你最终会比较不同的列,比如 t1.idt2.address .

关于MySQL:在 JOIN 中合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27912132/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com