这里的想法是 GROUP_CONCAT 从连接到 option_stock 和选项表的股票表中编译选项代码列表,并按股票 ID 分组。一个示例行是这样的:
Name Options Transmission
'Holden Commodore' '111, 145, 166, 188' 'Auto'
这个视图按原样工作,但我不禁觉得有一个更优雅的解决方案?
CREATE VIEW stock_view AS
(select s.description AS Name,
group_concat(o.option_code order by o.option_code ASC separator ', ')
AS Options,
(case
WHEN group_concat(o.option_code) LIKE '%111%' then 'Auto'
WHEN group_concat(o.option_code) LIKE '%112%' then 'Manual'
else 'Other'
end) as Transmission
from stock s
join option_stock ost ON s.id = ost.stock_id
join options o ON o.id = ost.option_id
group by s.id)
我试图避免在 CASE 困境中使用这个丑陋的 GROUP_CONCAT,但是Options
如果我在这样的 case 语句中使用它,我会收到一个错误,指出该字段不存在:
WHEN `Options` LIKE '%111%' then 'Auto'
我知道为什么会抛出错误 - 这是因为您不能以这种方式使用另一列的别名。但是有办法解决吗?