SQL SELECT * FROM tableA WHERE id IN (SELECT ids FROM tableB WHERE 1)

问题描述 投票:0回答:2

我正在寻找此查询的结果:

SELECT * FROM procesos WHERE estatus=1 AND id_proceso IN (3,1,5,7,4,6,8)

enter image description here

但是从以下查询中选择进程:

SELECT procesos FROM tipos_fichas WHERE id_tipo='1'

enter image description here

我尝试过但没有成功的是:

SELECT * FROM procesos WHERE estatus=1 AND id_proceso IN (SELECT procesos FROM tipos_fichas WHERE id_tipo='1')

enter image description here

如你所见,它只给我带来第一个结果...就好像我只能读取逗号之前的第一个过程(3,1,5,7,4,6,8)

有人知道我该如何解决吗?

mysql sql where-clause
2个回答
1
投票

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

0
投票

这是我使用的解决方案:

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)

© www.soinside.com 2019 - 2024. All rights reserved.