2015-10-06 40 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

相關問題