MYSQL:LIKE(子查询)返回许多行

时间:2013-06-02 11:28:03

标签: mysql subquery rows sql-like

以下代码正常工作。

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

我的问题是,大部分时间我需要返回多行。

我省略了LIMIT,导致'错误代码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),'%')

2 个答案:

答案 0 :(得分:5)

为什么不简单;

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

An SQLfiddle to test with

答案 1 :(得分:1)

你可以试试这个:

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

查看有关RLIKE

的手册