我正在寻找此查询的结果:
SELECT * FROM procesos WHERE estatus=1 AND id_proceso IN (3,1,5,7,4,6,8)
但是从以下查询中选择进程:
SELECT procesos FROM tipos_fichas WHERE id_tipo='1'
我尝试过但没有成功的是:
SELECT * FROM procesos WHERE estatus=1 AND id_proceso IN (SELECT procesos FROM tipos_fichas WHERE id_tipo='1')
如你所见,它只给我带来第一个结果...就好像我只能读取逗号之前的第一个过程(3,1,5,7,4,6,8)
有人知道我该如何解决吗?
MySQL 将字符串值
'3,1,5,7,4,6,8'
转换为整数值 3
,并丢弃字符串的其余部分。这就是为什么找不到其余值的原因。这是 MySQL 的一个无声特性,我个人不喜欢。
您可以使用
LIKE
运算符来查找所需的匹配项,如下所示:
select p.*
from procesos p
join tipos_fichas t on concat(',', t.procesos, ',')
like concat('%,', p.id_proceso, ',%')
where p.estatus = 1
这是我使用的解决方案:
SELECT * FROM procesos
WHERE id_proceso IN (
SELECT * FROM (
SELECT id_proceso FROM tipos_fichas
WHERE id_tipo='1') as a
);
它很难看,但是IN内的两个select是必需的,并且作为a也是
当然,第一个 SELECT 应该是 UPDATE/DELETE...并且您可以添加 WHERE、ORDER BY...
如果 SELECT id_proceso FROM Tipos_fichas 可能返回重复的 id,请添加 DISTINCT(id_proceso)