将 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 tabe1324
和 kls889
并且外部查询应该只显示 id 1
。 ufa132
在子查询中不匹配,因为 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
我有两个 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 tabe1324
和 kls889
并且外部查询应该只显示 id 1
。 ufa132
在子查询中不匹配,因为 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