JOIN 两个 SELECT 查询,即使没有相关,也会保留第一个表中的 ALL 元素

JOIN two SELECT queries, leaving ALL element from first table even without corrispondence

提问人:Glob Dug 提问时间:11/14/2023 最后编辑:jarlhGlob Dug 更新时间:11/14/2023 访问量:42

问:

我需要帮助将两个选择加入 Sqlite 数据库中。

我想列出第一个表的所有元素,即使第二个表中没有相关因素......我写下表格是因为我不知道如何用语言很好地解释......😅

这些是我的表格:

表1

enter image description here

表2

enter image description here

预期结果

enter image description here

我的查询是:

SELECT tab1.ID, tab1.email, tab1.email2, tab2.name
FROM tab1
LEFT JOIN tab2
WHERE tab2.email LIKE tab1.email
   OR tab2.email LIKE tab1.email2

...我得到的是:什么都没有......

注意:我在 markdown 中创建了所有表格,但我总是收到此错误

您的帖子似乎包含未正确格式化的代码。请使用代码工具栏按钮或 CTRL+K 键盘快捷键将所有代码缩进 4 个空格。如需更多编辑帮助,请单击 [?] 工具栏图标。

做这篇文章非常令人沮丧!😫

sql sqlite 联接

评论

1赞 Bohemian 11/14/2023
更改为WHEREON
0赞 Glob Dug 11/14/2023
完成,但我得到“名称”列为空。只有当等于 或 时,我才能得到这个名字。如果 tab1.email 作为 tab2.email 的子字符串存在,“LIKE”是否应该给出结果?tab2.emailtab1.emailtab1.email2
0赞 jarlh 11/14/2023
设置表格格式:将数据写入适当的列中。高亮。点击。{}
1赞 NickW 11/14/2023
如果您使用不带通配符的 LIKE,则与 = 相同

答:

2赞 Littlefoot 11/14/2023 #1

功能怎么样?instr

select a.id, a.email, a.email2, b.name
from tab1 a left join tab2 b on instr(b.email, a.email)  > 0
                             or instr(b.email, a.email2) > 0
order by a.id;

结果是

ID  EMAIL                   EMAIL2                  NAME
--  --------------------    ---------------------   ------
1   [email protected]       [email protected]      Pippo
2   [email protected]       null                    Pluto
3   [email protected]    [email protected]  null
4   [email protected]      null                    null
5   null                    [email protected]         Mario

看看小提琴