MySQL:将这两个子选择的结果合二为一

标签 mysql subquery

我搜索了很多,但没有找到合适的答案,在尝试了几个小时后,是时候询问知道的人了:)

好的,这是查询(删除所有不必要的内容):

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_levelguide_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/

相关文章:

php - 如何通过mysql查询获取不同时区事件的剩余天数,小时,分钟,秒数

mysql - AWS Web 服务上的 Wordpress 多服务器

mysql - SQL - 没有销售的产品

mysql - 当值是小数和非小数时,如何使用子查询从mysql表中获取最大列值

swift - 如何使用 BETWEEN 子句创建 CoreData SUBQUERY?

mysql - MariaDB 10.1 Order By + Limit 不一致

mysql - SoapException com.mysql.jdbc.driver

mysql - 如何使用 MySQL 将子查询结果存储在 session 变量中?

sql - PostgreSQL 的函数/子查询表

mysql - 在 MySQL 中组合简单的 QUERIES