2013-06-02 92 views
1

以下代碼正常工作。MYSQL:LIKE(子查詢)返回多行

SELECT Message 
FROM SystemEventsR 
WHERE Message 
LIKE CONCAT('%',(SELECT username FROM users LIMIT 1),'%') 

雖然我的問題是,大多數時候我需要返回多個行。

我省略這將導致一個「錯誤代碼1242」

這是爲什麼的限制?

我需要上述所有消息的至少一個用戶名

我還使用了JOIN,但無濟於事

SELECT Message 
FROM SystemEventsR 
JOIN users ON Message LIKE CONCAT('%',(SELECT username FROM users),'%') 

我想類似下面的,但排在用戶表中的號碼不恆定

SELECT Message 
FROM SystemEventsR 
WHERE 
Message LIKE CONCAT('%',(SELECT username FROM users LIMIT 1,1),'%') OR 
Message LIKE CONCAT('%',(SELECT username FROM users LIMIT 2,1),'%') OR 
Message LIKE CONCAT('%',(SELECT username FROM users LIMIT 3,1),'%') 
+0

您是否試圖獲取所有帶有有效用戶名的郵件?如果是這樣你想加入。 –

+0

是的,我需要包含至少一個用戶名的所有消息。加入後,我很難用「開」的部分。你能舉個例子嗎? –

+0

「SystemEventsR」中是否有任何列'user id'? – sarwar026

回答

5

爲什麼不簡單;

SELECT Message 
FROM SystemEventsR s 
JOIN users u 
    ON s.Message LIKE CONCAT('%',u.username,'%') 

An SQLfiddle to test with

+0

謝謝你,工作就像一個魅力! –

1

你可以試試這個:

SELECT Message 
FROM SystemEventsR 
WHERE Message 
RLIKE (SELECT GROUP_CONCAT(username SEPARATOR '|') FROM users) 

查閱有關RLIKE的手冊。