【问题标题】:Separating one column to multiple columns将一列分成多列
【发布时间】:2019-01-17 16:32:40
【问题描述】:

我正在尝试从我们的数据库中检索数据,并且我加入了另一个表,我需要从该列中获取数据,但被分成多个列。

到目前为止我有这个代码:

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

一家餐厅可以有多个餐点类型和价格,但它们在同一列中,因此在最后一个 SELECT 子查询中,我试图将它们分成 3 列:早午餐价格、午餐价格、晚餐价格。

我一直得到的错误是:

子查询返回多于 1 行。

【问题讨论】:

  • 另外,如果我没有清楚地解释这一点,请随时要求澄清,或者如果我以错误的方式提出问题,请随时纠正我。

标签: mysql sql


【解决方案1】:

您从未在子选择语句中完成查询。 extras_events_id 应该等于 extras_events.id。如果不包括它,您只需检查它是否为true,这将返回表中“午餐”的每个meal_type

SELECT extras_event_meals.price
FROM extras_event_meals
WHERE meal_type LIKE 'lunch'
AND extras_event_id = extras_events.id

【讨论】:

  • 为什么 extras_events_id 应该等于 restaurant.id?我认为它们根本不是同一个数字
  • 我可以看到AND语句没有完成,我明白了那部分。所以这是错的一件事。但我不清楚 extras_events_id 应该等于 restaurant.id
  • 这两个表是如何链接的? extras_events_id 应该等于餐厅餐桌上的东西,对吗?也许是extras_events_id = extras_event_meals.id?我对桌子之间的实际联系有点困惑(餐厅中的什么应该链接到 extras_event_meals 中的什么),修复它(在所有 3 个子查询中),你应该是金色的。
  • 所以,如果我正确理解我的表格,这就是所有链接的方式:餐馆:包含餐馆信息。 extras_events:包含 id,然后是 restaurant_id,然后是 project。这是多对多的关系:一家餐厅可以有多个项目,而项目可以有多个餐厅。 extras_events 通过 restaurant_id 链接到餐厅 extras_events_meals:包含一个 id,然后是 restaurant_id,然后是 project。一个餐厅可以为每个项目提供多餐。 extras_events_meals 通过 extras_event_id 链接到 extras_events
  • 查看我的更新答案。试试看,如果还有问题,请告诉我。
猜你喜欢
  • 2011-12-07
  • 2015-09-08
  • 1970-01-01
  • 2018-02-27
  • 1970-01-01
  • 1970-01-01
  • 2014-07-24
  • 1970-01-01
相关资源
最近更新 更多