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

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),',%')


表everas:

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


该表具有这种结构,以避免重复值

我感谢您的帮助。

最佳答案

这有点猜测,因为我不是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指出的那样,如果您发布一个示例,说明预期结果肯定会有所帮助。

此外,您应该将“传感器”字段中的多个值移动到多对多表(contactos_id,sensor_id)。优化器无法对逗号分隔的列表做任何聪明的事情,因此对该字段进行任何过滤或联接将非常低效。

关于mysql - MySql选择2个表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9507972/

10-09 23:34