MySql选择2个表喜欢

时间:2012-02-29 22:54:24

标签: mysql select sql-like concat

我有这个查询,但显然它可以循环并崩溃服务器。

SELECT neveras.Panel, contactos.Email FROM neveras, contactos
WHERE neveras.Alarma = 1 And  Estado <> 1
And contactos.Sensor 
LIKE CONCAT('%,',(Select Usuario FROM neveras where Alarma = 1),',%')

表neveras:

Id|Panel|Usuario|Alarma|Estado
 1  uno     1       1     2
 2  dos     1       2     1
 3  tres    2       2     1
 4  cuatro  2       2     1
 5  cinco   3       2     1

表联系人:

Id  |Email   |Nombre    |Sensor
 1  uno@uno   nombre1     1,3,5   
 2  dos@dos   nombre2     2,4    

此表具有此结构以避免重复值

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

这是一个猜测,因为我不是100%确定你想要实现的目标,但试试这个 -

SELECT neveras.Panel, contactos.Email 
FROM neveras
INNER JOIN contactos
    ON FIND_IN_SET(neveras.Usuario, contactos.Sensor)
WHERE neveras.Alarma = 1
AND neveras.Estado <> 1

正如Mosty所指出的那样,如果你在结果中发布了一个你期望的例子,肯定会有所帮助。

除此之外,您应该将Sensor字段中的多个值移动到多对多表(contactos_id,sensor_id)。优化器无法使用逗号分区列表做任何聪明的事情,因此任何过滤或加入该字段的效率都会非常低。