mysql - 每个派生表必须有自己的别名

时间:2015-06-11 12:12:38

标签: mysql

获取错误"#1248 - 每个派生表必须有自己的别名"通过phpMyAdmin运行以下查询时:



SELECT 
    `free_from`, `free_until`
FROM 
(
    SELECT 
        a.end AS `free_from`,
        (SELECT MIN(c.start) FROM bookings c WHERE c.start>a.end) as `free_until`
    FROM bookings a
    WHERE NOT EXISTS (
        SELECT 1
        FROM bookings b
        WHERE b.start BETWEEN a.end AND a.end + INTERVAL 30 Minute
    ) 
    AND a.end BETWEEN '2012-11-16 09:00:00' AND '2012-11-16 22:00:00' 
)




在这方面你能帮助我吗?

1 个答案:

答案 0 :(得分:1)

当前的问题是您的外部查询需要别名。但是,对于这种逻辑,您根本不需要子查询。并且,因为MySQL倾向于实现子查询,这可以提高性能:

SELECT a.end AS `free_from`,
       (SELECT MIN(c.start)
        FROM bookings c
        WHERE c.start > a.end
       ) as `free_until`    
FROM bookings a
WHERE NOT EXISTS (SELECT 1
                  FROM bookings b
                  WHERE b.start BETWEEN a.end AND a.end + INTERVAL 30 Minute
                 ) AND
      a.end BETWEEN '2012-11-16 09:00:00' AND '2012-11-16 22:00:00';