2017-07-29 41 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