我有3张桌子。 用户(ID,姓名) 物品(身份证,姓名,价格)和 订单(ID,USER_ID,ITEM_ID)
这里我的item_id列有逗号分隔值,如[1,2,3]
。我有以下查询,如果item_id具有单个值,则完美有效。
select users.name,items.price
from orders
join users
on user.id = orders.user_id
join items
on items.id = orders.item_id
where orders.id = 1
任何人都可以建议我如果有逗号分隔值,我怎样才能得到与上述查询相同的结果?
答案 0 :(得分:1)
尝试find_in_set
功能:
select users.name,items.price
from orders
join users
on user.id = orders.user_id
join items
on find_in_set(items.id, orders.item_id)
where orders.id = 1
但是,以逗号分隔的商店id
是一种糟糕的数据库设计,您最好添加一个表来存储orders
和items
之间的关系。
举一个例子:
create table order_item (
order_id varchar(20),
item_id varchar(20)
);
然后查询:
select users.name,items.price
from orders
join users
on user.id = orders.user_id
join order_item oi on oi.order_id = orders.id
join items on oi.item_id = items.id
where orders.id = 1
group by orders.id
<强> 修改 强>:
如果包含[]
,您可以尝试:
select users.name,items.price
from orders
join users
on user.id = orders.user_id
join items
on find_in_set(items.id, replace(replace(orders.item_id, '[', ''), ']', ''))
where orders.id = 1
答案 1 :(得分:0)