2017-07-29 69 views
0
SELECT ids_horarios_adicionales from adicionales WHERE id_adicionales=1 

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

什么IM打算做的是这样的:

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 

)任何想法如何使里面的SELECT查询(打印为1,3

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

+1

最好的办法是一定要规范你databale和存储'1'和'3'在stomic值使用FIND_IN_SET单独的表格行,但不是字符串“1,3”(三个字符)。如果同比不喜欢这个想法,那么你必须解析这个字符串并将其分解为单独的值。在SO上查找'mysql split逗号分隔列表',这个主题有很多答案。 – krokodilko

+0

@krokodilko这是我想要的结果,你建议什么方法? http://sqlfiddle.com/#!9/714a50/2 – Ered

+1

这似乎是一个很奇怪的方式来构造查询。你的问题应该包括示例数据和期望的结果(最好有SQL小提琴,但基本问题也应该有)。 –

回答

0

我用走的时候我不知道你的方案,但在一般的JOIN,你需要详细说明如何我们所做的表之间的连接。例如,LEFT JOIN horarios B关于b.index = adicionales.index然后使用WHERE语句来限制行

+0

这就是我打算http://sqlfiddle.com/#!9/714a50/2,任何建议? – Ered

+0

应该是这样的: SELECT * FROM adicionales左连接horarios B关于b.id_horarios = a.id_adicionales WHERE a.id_adicionales =在1个 –

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 
+0

未知列 'A2' 'where子句' – Ered

1

您可以通过这种方式

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