我搜索了很多,但没有找到合适的答案,在尝试了几个小时后,是时候询问知道的人了:)
好的,这是查询(删除所有不必要的内容):
SELECT
`id`,
`name`,
`details`,
`tour_type_id`,
`meeting_point_id`,
`start_date`,
`start_time`,
`end_date`,
`end_time`,
`max_guests`,
(SELECT
MAX(`level`)
FROM
`tour_notification`
WHERE
`model_id` = `tour`.`id`
AND `deactivated` != 1) `notification_level`,
(SELECT
MAX(`level`)
FROM
`guide_notification`
WHERE
(`tour1_id` = `tour`.`id`
OR `tour2_id` = `tour`.`id`)
AND `deactivated` != 1) `guide_notification_level`
FROM
`tour`
我没有成功的是在一个中获得 2 MAX(level
):
从 notification_level
和 guide_notification_level
获取最大值。
我不需要单独的这些值,我只是没有成功地加入其中。
我最好的尝试是以下方法:
(SELECT
MAX(`level`)
FROM
(SELECT `level` FROM
`tour_notification`
WHERE
`model_id` = `tour`.`id`
AND `deactivated` != 1 UNION DISTINCT SELECT `level`
FROM
`guide_notification`
WHERE
(`tour1_id` = `tour`.`id`
OR `tour2_id` = `tour`.`id`)
AND `deactivated` != 1) as `notifications`) `notification_level`,
但是MySQL在这里提示: 错误:错误 1054:“where 子句”中的未知列“tour.id”
如果我将游览表添加到这些子选择的 where 子句中,它总是会获取游览表中任何项目的结果,而不仅仅是当前的结果。
有人可以把我推向正确的方向吗? 非常感谢!
最佳答案
以下内容可能适合您。它提供了三种将级别组合到一列中的不同方法。删除您不想要的。
SELECT
a.`id`,
a.`name`,
a.`details`,
a.`tour_type_id`,
a.`meeting_point_id`,
a.`start_date`,
a.`start_time`,
a.`end_date`,
a.`end_time`,
a.`max_guests`,
a.`tour_level`,
a.`guide_level`,
CONCAT(`tour_level`," ",`guide_level`) as `notification_level1`,
a.`tour_level` + a.`guide_level` as `notification_level2`,
GROUP_CONCAT(CONCAT(a.`tour_level`," ",a.`guide_level`) as `notification_level3`
FROM `tour` a
LEFT JOIN `tour_notification` b
ON a.`id` = b.`model_id` AND b.`deactivated` <> 1
LEFT JOIN `guide_notification` c
ON a.`id` = c.`tour2_id` AND c.`deactivated` <> 1
GROUP BY a.`id`
关于MySQL:将这两个子选择的结果合二为一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49842036/