我正在尝试从数据库中检索数据,并且我加入了另一个表,我需要从该列获取数据,但将其分为多个列。
到目前为止我有这个代码:
SELECT
restaurants.name AS 'Name',
extras_time_slots.restaurant_id AS 'DC ID',
SUM(capacity) AS 'Seats opened',
meal_group_name AS 'Category',
CASE
WHEN extras_events.status = 0 THEN 'Offline'
WHEN extras_events.status = 1 THEN 'Submitted'
WHEN extras_events.status = 2 THEN 'Online'
ELSE 'Unknown'
END AS 'Status',
CASE
WHEN restaurants.region_id = 29 THEN 'Beijing'
WHEN restaurants.region_id = 31 THEN 'Shanghai'
WHEN restaurants.region_id = 63 THEN 'Guangzhou'
WHEN restaurants.region_id = 83 THEN 'Shenzhen'
WHEN restaurants.region_id = 86 THEN 'Hangzhou'
WHEN restaurants.region_id = 88 THEN 'Suzhou'
WHEN restaurants.region_id = 91 THEN 'Chengdu'
ELSE 'Unknown'
END AS 'City',
(
SELECT extras_event_meals.price
FROM extras_event_meals
WHERE meal_type LIKE 'lunch'
AND extras_events_id
) AS 'Lunch price',
(
SELECT extras_event_meals.price
FROM extras_event_meals
WHERE meal_type LIKE 'dinner'
AND extras_events_id
) AS 'Dinner price',
(
SELECT extras_event_meals.price
FROM extras_event_meals
WHERE meal_type LIKE 'brunch'
AND extras_events_id
) AS 'Brunch price'
FROM extras_time_slots
JOIN restaurants
ON extras_time_slots.restaurant_id = restaurants.id
JOIN extras_events
ON extras_events.restaurant_id = restaurants.id AND extras_events.project = extras_time_slots.project
JOIN extras_event_meals
ON extras_event_meals.extras_event_id = extras_events.id
WHERE extras_time_slots.project = 'rwcn_autumn_2018'
GROUP BY restaurants.id;
因此,表 extras_events_meal_price 为一家餐厅提供了多份具有类型和价格的“餐食”。
以下是各列:
id
extras_events_id
meal_type
price
created_at
updated_at
一家餐厅可以有多个 Meal_type 和 Price,但它们位于同一列中,因此通过我的最后一个 SELECT 子查询,我尝试将它们分成 3 列:早午餐价格、午餐价格、晚餐价格。
我经常遇到的错误是:
Subquery returns more than 1 row.
最佳答案
您从未在子选择语句中完成查询。 extras_events_id
应等于 extras_events.id
。如果不包含它,您只需检查它是否为 true
,这将返回表中“lunch”的每个 meal_type
:
SELECT extras_event_meals.price
FROM extras_event_meals
WHERE meal_type LIKE 'lunch'
AND extras_event_id = extras_events.id
关于mysql - 将一列分隔为多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51780069/