将 LIKE 与多行子查询一起使用时如何避免错误 1242

How to avoid Error 1242 when using LIKE with a subquery with multiple rows

我有两个 table。我想从第一个 table 中找到在一列中有一个字符串的行,其中包含两个连接的字符串,这些字符串出现在第二个 table 的某行中。当我试图为此编写查询时,它给出了错误 1242,因为子查询有多个行:

SELECT items_info.id
FROM items_info
WHERE UPPER(items_info.note) LIKE CONCAT('%',
(
    SELECT CONCAT(prefix,code)
    FROM users
    WHERE last4 IS NOT NULL
 ),'%')

子查询应该 return tabe1324kls889 并且外部查询应该只显示 id 1ufa132 在子查询中不匹配,因为 last4 列对于具有该代码和前缀的用户为空。

也许对子查询使用 NOT LIKE 是错误的解决方案?如何在没有 运行 进入此错误的情况下获得所需的结果?

这是我的 table 示例数据。

Table items_info:

 id    note
  1    Code: tabe1324
  2    Used: ufa132
  3    Opened: ufa132

Table users:

 id    fname     lname     last4    code     prefix
  1     Jon       Doe      1234     1324      tabe
  2     Jim       Smith    NULL     132       ufa
  3     Donald    Brown    5881     889       kls
SELECT items_info.id
FROM items_info
WHERE NOT EXISTS (
    SELECT 1 
    FROM users 
    WHERE 
        items_info.note LIKE CONCAT('%',prefix,code,'%') 
        AND last4 IS NULL
)

结果:

id
1