23

我怎样才能使这项工作?

SELECT * 
FROM   item 
WHERE  item_name LIKE '%' 
                      || (SELECT equipment_type 
                          FROM   equipment_type 
                          GROUP  BY equipment_type) 
                      || '%' 

内部子查询返回一个字符串列表,如“The”、“test”、“another”,我想从 item_name 类似于子查询返回值的项目表中选择所有项目。我需要有外卡。

有没有可以使用通配符但使用 IN sql 命令的替代方法?

4

4 回答 4

34

您可以使用INNER JOIN

SELECT I.* 
FROM item I
INNER JOIN (SELECT equipment_type 
            FROM equipment_type 
            GROUP BY equipment_type) E
    ON I.item_name LIKE '%' || E.equipment_type || '%'
于 2013-06-18T20:03:41.617 回答
10

如果您不想担心重复并且不在乎哪一个匹配,那么切换到 using exists

select i.*
from item i
where exists (select 1
              from equipment_type
              where i.item_name like '%'||equipment_type||'%'
             )
于 2013-06-18T20:06:15.167 回答
3

对于上面的 MSSql Server 不飞

利用

select *
from item I
where exists (select 1
          from equipment_type
          where i.item_name like (SELECT CONCAT('%',equipment_type,'%')) 
         )
于 2020-06-30T11:49:29.493 回答
2

您可以使用CONCAT和插入子查询:

SELECT * FROM item WHERE  item_name LIKE  
CONCAT('%', (
    SELECT equipment_type
    FROM equipment_type
    GROUP BY equipment_type), '%'
)
于 2021-07-29T12:26:33.787 回答