Mysql连接查询困境

标签 mysql subquery

我有 4 个表,我正在尝试在其中提取某些数据,这个查询的结构可能不是很好,但我的原型(prototype)至少需要一些东西。我得到了

    users
    ------
    id
    parent_id
    name
    surname

    bookings
    --------
    id
    client_id
    division_id
    subdivision_id
    sub_event_id
    host_id
    guest_id

    itineraries
    ----------
    id
    booking_id
    itinerary_type_id
    client_cost

    itinerary_type
    -------------
    flight
    hotel
    transfer

这是我当前的查询

    

         SELECT 

         (SELECT CONCAT(name,' ',surname) FROM users WHERE id = bookings.host_id) AS host, 
    CONCAT(users.name,'  ',users.surname) AS name, 
    (SELECT client_cost FROM itineraries WHERE itinerary_type_id = 1 AND booking_id = bookings.id AND client_cost IS NOT NULL) AS flight,
    (SELECT client_cost FROM itineraries WHERE itinerary_type_id = 2 AND booking_id = bookings.id AND client_cost IS NOT NULL) AS hotel,
    (SELECT client_cost FROM itineraries WHERE itinerary_type_id = 3 AND booking_id = bookings.id AND client_cost IS NOT NULL)  AS transfer,
    (total1 + total2 + total3)  AS total

    FROM 

    (SELECT(SELECT client_cost FROM itineraries WHERE itinerary_type_id = 1 AND booking_id = bookings.id AND client_cost IS NOT NULL) as total1,
    (SELECT client_cost FROM itineraries WHERE itinerary_type_id = 2 AND booking_id = bookings.id AND client_cost IS NOT NULL) as total2,
    (SELECT client_cost FROM itineraries WHERE itinerary_type_id = 3 AND booking_id = bookings.id AND client_cost IS NOT NULL) as total3 FROM  bookings) q, users 

    JOIN bookings ON bookings.guest_id = users.id 
    JOIN clients ON users.client_id = bookings.client_id 
    JOIN details ON details.user_id = users.id 
    JOIN divisions ON divisions.client_id = users.client_id 
    JOIN subdivisions ON subdivisions.division_id = bookings.division_id JOIN sub_events ON sub_events.id = bookings.sub_event_id 
    JOIN itineraries ON itineraries.booking_id = bookings.id WHERE bookings.id = 1572 
    GROUP BY bookings.id

预期结果是


    host       |name      |flight|hotel|transfer|Total
    --------------------------------------------------
    Mike Little|Bob Parker|200   |100  |30      |330

目前,我正在使用子查询临时制作一个表格,从中我可以获得总数。但它似乎不起作用...我认为,问题是我无法将预订 ID 传递给新的临时子查询表...还有其他方法可以解决它吗?我将永远幸福! :-) ..真的!!!

最佳答案

这可能不是您正在寻找的确切 SQL(省略了许多与其他代码表的联接,但仅包括主要查询),并且可能存在愚蠢的语法错误,因为我尚未对其进行测试。但想法是选择预订摘要,然后将摘要与用户表连接起来。 (该查询被通用化以适应多个预订 ID 选择。)

SELECT
    booking_summary.booking_id,
    booking_summary.host_id,
    concat(users.name, ' ', users.surname) as host, 
    concat(users.name, ' ', users.surname) as name, 
    booking_summary.flight, 
    booking_summary.hotel, 
    booking_summary.transfer, 
    (booking_summary.flight+booking_summary.hotel+booking_summary.transfer) as total
FROM
    (select booking_id, max(host_id) as host_id, sum(flight) as flight, sum(hotel) as hotel, sum(transfer) as transfer from (
        select b.host_id, i.booking_id, i.client_cost as flight, 0 as hotel, 0 as transfer from itineraries i, bookings b where i.itinerary_type_id = 1 AND i.booking_id in (1572, 1573, 1574) and i.booking_id=b.id
        union all
        select b.host_id, i.booking_id, 0 as flight, i.client_cost as hotel, 0 as transfer from itineraries i, bookings b where i.itinerary_type_id = 2 AND i.booking_id in (1572, 1573, 1574) and i.booking_id=b.id
        union all
        select b.host_id, i.booking_id, 0 as flight, 0 as hotel, i.client_cost as transfer from itineraries i, bookings b where i.itinerary_type_id = 3 AND i.booking_id in (1572, 1573, 1574) and i.booking_id=b.id
    ) temp_booking_result group by booking_id) booking_summary,
    users
WHERE
    users.id=booking_summary.host_id;

关于Mysql连接查询困境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13061288/

相关文章:

sql - 在这种情况下如何避免嵌套的 SQL 查询?

mysql - 条件是否应该在子查询上重复

subquery - 将 ActivityHistory 作为子查询查询时的 SOQL 问题..

php - 准确保存和显示文本的输入和提交方式

php - 如何优化 SQL 查询以避免 while() 嵌套子查询?

sql - 如何使用 Eloquent 在 Laravel 中编写以下 SQL 查询?

java - Hibernate:创建 Mysql InnoDB 表而不是 MyISAM

java - 我有 hibernate 错误

mysql - 如果 ID 不在数组/逗号分隔列表中,则获取行

mysql - 转换查询中的值