2015-10-06 39 views
0

我有两个表。我想从第一个表中找到一行中包含两个连续字符串的行,这些字符串出现在第二个表的某一行中。当我试图写这样的查询,它给了错误1242,因为子查询有多个行:如何避免使用LIKE与多行子查询时的错误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 
),'%') 

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

也许使用NOT LIKE与子查询是错误的解决方案?我怎样才能得到所需的结果,而不会遇到这个错误?

这里是我的表与示例数据。

items_info

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

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 
+0

这是什么问题? – Strawberry

+0

子查询返回多行,导致它失败。我的示例数据没有正确显示(2 NULLS,1不为空),所以我相应地编辑了它。 – SlackerZeitgeist

回答

0
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 
+0

这似乎返回所有行。我编辑了一些数据,使我想要做的更清楚些。 [SQLFiddle](http://sqlfiddle.com/#!9/7bb60/1) – SlackerZeitgeist

+0

@SlackerZeitgeist,我已经更新了我的答案。现在检查。 –

+0

当我在SQLFiddle中尝试这个时,我没有返回行。我最近编辑了我的问题,并解释了我想要做的事情。我试图得到与你的结果相反的结果。我想'1'返回。 – SlackerZeitgeist

相关问题