gpt4 book ai didi

MySQL JOIN 只返回第一个匹配项

转载 作者:行者123 更新时间:2023-11-29 21:14:47 26 4
gpt4 key购买 nike

我尝试使用此联接返回多行用户 ID,发现它们位于另一个表中特定行的收件人列表中。

SELECT a.`USER_ID`
FROM Users a
INNER JOIN Lists b ON a.`USER_ID` = b.`RECIP`
WHERE a.`PARENT` = '1'
AND b.`LIST_ID` = '210'

上面的查询应返回 5 行,因为 RECIP 中有 5 个匹配项,但我只看到 1 个结果,这是 RECIP 中的第一个匹配项

在表“Lists”中,行 LIST_ID“210”RECIP 包含“22,33,40,42,45”因此,我希望查询能够从“Users”表中返回 5 行,因为所有这些 USER_ID 都存在:

USER_ID 22

USER_ID 33

USER_ID 40

USER_ID 42

USER_ID 45

但我只得到一个结果:

USER_ID 22

我尝试了很多方法(SELECT DISTINCT...、GROUP BY a.ID),但没有取得任何进展。老实说,我仍在努力了解连接问题。

谁能给点建议吗?

最佳答案

问题是 recip 字段包含列表中的数字,如 '22,33,40,42,45'。如果此字符串与a.USER_ID = b.RECIP中的数字匹配,则该字符串将被评估为数字22,因为逗号不是mysql中有效数字表达式的一部分,因此mysql停止在第一次出现逗号时评估字符串。

最好的解决方案是标准化您的数据结构,并将 recip 中的每个值存储在其自己的记录中。

快速解决方案是使用 find_in_set()连接表达式中的函数:

SELECT a.`USER_ID`
FROM Users a
INNER JOIN Lists b ON find_in_set(a.`USER_ID`,b.`RECIP`)>0
WHERE a.`PARENT` = '1'
AND b.`LIST_ID` = '210'

关于MySQL JOIN 只返回第一个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36041514/

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