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
答案 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语句限制行