我有这个问题。我有两个表,我想从中推断出值,特别是在表的一个字段中,第二个表的id分隔开; 使用此程序:
SELECT name
FROM tab1
WHERE id in (SELECT REPLACE(field,";",",") as idresult
from tab2
where tab2.id=1)
从这个查询我希望有更多行,因为在tab2字段中有这些值(1; 2; 3; 4; 5)
如果您在没有选择替换的情况下运行相同的过程,我会得到正确的 结果ie ::
SELECT name FROM tab1
WHERE id in (1,2,3,4,5)
是的。我应该使用替换件吗?
答案 0 :(得分:0)
您的WHERE
子句中存在问题:in
用于比较值和值向量(列)。在您的情况下,检查tab1.id
是否至少等于idresult
的一个结果。
但是 idresult
只是字符串的一列 - 现在内部带有,,而不是; 更换后。
您可以使用MySQL locate function来查找字符串中是否存在子字符串:
SELECT name
FROM tab1, tab2
WHERE LOCATE(tab2.id, tab2.field)>0
答案 1 :(得分:0)
我的理解是tab2查询将为您提供逗号分隔的字符串,该字符串应在tab1中用作过滤器。为此,您可以在MySQL中使用FIND_IN_SET命令,如下所示:
select name from tab1 where find_in_set( id, (SELECT REPLACE(field,";",",") from tab2 where tab2.id=1)) > 0;