2016-07-14 67 views
0

我有2個表格「orders」和「genlist」。在genlist表中生成一些生成的信息,id | date | order_ids(1,2,3,4 ...)。我需要從某個日期的orders_ids值列表中選擇「orders」中的所有訂單。Mysql從值列表中選擇

id | date| order_ids ---|------|-------- 1 | 00-00| 1,2,3,4 2 | 00-00| 5,6,7,8

SELECT * FROM orders 
WHERE id IN (
select order_ids from genlist 
where date ='2016-07-04' 
) 

它,不是正常工作,返回列表order_ids的只有第一個元素(1,2,3,4 ......)。只是「1」 我該如何寫這個?

+1

你列'order_ids'的值是「1,2,3,4」?用逗號分隔? – Blank

+0

標準化您的設計 – Strawberry

+0

是的,'order_ids'的值由逗號分隔。 – ratVien

回答

0

我解決這個問題。

select * from orders 
where FIND_IN_SET(id, (select group_concat(order_ids) 
from gen_list)) 

它的效果很好,但它應該提到的是

結果被截斷,其具有1024的值的缺省值是由group_concat_max_len系統變量給出的最大長度,可以設置得更高,但返回值的有效最大長度受max_allowed_pa​​cket值限制。改變在運行時group_concat_max_len值的語法如下,其中val是一個無符號整數:

SET [GLOBAL | SESSION] group_concat_max_len = val; 
0

試試這個:

 
    Select *,b.desc1,b.desc2 from 
    (Select * from orders) as a 

    left join 

    (select order_ids,desc1,desc2 from genlist) as b 
    on a.order_ids = b.order_ids 
+0

這是行不通的。三重選擇下降mysql服務器 – ratVien

+0

你是什麼意思?它返回一個錯誤? –