IN中的SQL查询结果

时间:2017-07-29 17:24:48

标签: mysql sql

SELECT ids_horarios_adicionales from adicionales WHERE id_adicionales=1

因此,此查询返回结果1,3,行ids_horarios_adicionales将包含以逗号分隔的ID。

我打算做的是:

SELECT *
FROM adicionales a
LEFT JOIN horarios b ON b.id_horarios IN (1,3)
WHERE id_adicionales=1 

但是当我使用此查询时,结果不一样:

SELECT *
FROM adicionales a
LEFT JOIN horarios b ON b.id_horarios IN (SELECT ids_horarios_adicionales from adicionales WHERE id_adicionales=1)
WHERE id_adicionales=1 

任何想法如何在IN()内部进行SELECT查询以打印为1,3

这是我想要的架构和SQL查询结果,任何其他方法都会有所帮助:http://sqlfiddle.com/#!9/714a50/2

3 个答案:

答案 0 :(得分:1)

您不应将值存储在以逗号分隔的列表中。这就是你所面临的问题。我建议弄清楚如何更改数据结构。

但是,有时候,你会遇到其他人非常糟糕的设计(比如在字符串中存储整数值)。在这种情况下,您可以使用find_in_set()

SELECT *
FROM adicionales a LEFT JOIN
     horarios h
     ON EXISTS (SELECT 1
                FROM adicionales a2 
                WHERE find_in_set(h.id_horarios , a2) > 0 AND 
                      a2.id_adicionales = 1
               )
WHERE id_adicionales = 1 

答案 1 :(得分:1)

您可以通过这种方式使用FIND_IN_SET

SELECT *
FROM adicionales a
LEFT JOIN horarios b ON 
FIND_IN_SET(a.ids_horarios_adicionales,b.id_horarios)
WHERE id_adicionales=1 

答案 2 :(得分:0)

我不确定你的架构,但一般来说在使用LEFT JOIN时,你需要详细说明我们在表之间的连接是如何完成的。例如,LEFT JOIN horarios b ON b.index = adicionales.index然后使用where语句限制行