mysql - MySQL中的两个select错误 “Every derived table must have its own alias”?

标签 mysql

嗨,我是 mysql 新手,我正在尝试组合两个选择查询,但它给了我一个错误:每个派生表必须有自己的别名,但我已经给出了两个别名,我将非常感谢任何建议

我想检查 t1.start1,t1.end1,t1.tool1,t1.mall1 是否都在 子查询 t2.start2,t2.end2,t2.tool2,t2.mall2 状态未预订或撤回

        like my data in t1

                     start1              end1                 tool1            mall1       parentid
                    01/02/2016          01/07/2016           mat1             mallA        id11
                    01/01/2017          01/05/2017            mat4             mallB       id11





                data in t2 status are all  not booked or withdrawn

                start1              end1                 tool1            mall1       parentid
                01/01/2016          01/08/2016           mat1             mallA        id22
                01/01/2017         01/08/2017            mat3             mallB        id29

t1 将通过条件,因为 t1.start1、t1.end1、t1.tool1、t1.mall1 都在子查询中或在 ubquery t2.start2、t2.end2、t2 的两个日期 start2 和 end2 之间。 tool2,t2.mall2 状态未预订或撤回

     SELECT    t1.start1
FROM      (
                 SELECT p1.start_date   AS start1,
                        p1.end_date     AS end1,
                        p1.tool_type_id AS tool1,
                        p1.parent_id,
                        p1.mall_id AS mall1
                 FROM   tbltools p1
                 JOIN   app_fd_iads_reservation b1
                 ON     p1.parent_id = b1.id
                 WHERE  p1.parent_id = "id11") AS t1
LEFT JOIN
          (
                 SELECT p11.start_date   AS start2,
                        p11.end_date     AS end2,
                        p11.tool_type_id AS tool2,
                        p11.parent_id ,
                        p11.mall_id AS mall2
                 FROM   tbltools p11
                 JOIN   tblbooking b11
                 ON     p11.parent_id = b11.id
                 WHERE  b1.status != 'Booked' && b1.status != 'Withdrawn' ) ) AS t2 ON (
  (
    t1.start1 = t2.start2
    OR
    t1.end1 = t2.end2
  )
  OR
  (
    t1.start1> t2.start2
    AND
    t1.end1 < t2.end2
  )
  OR
  (
    t1.start1> t2.start2
    AND
    t1.start1< t2.start2
  )
  OR
  (
    t1.end1 > t2.end2
    AND
    t1.end1 < t2.end2
  )
  OR
  (
    t1.start1 < t2.start2
    AND
    t1.end1 > t2.end2
  )
)
AND
t1.tool1 = t2.tool2
AND
t1.mall1 = t1.mall2 

最佳答案

以 t1 为父级,t2 为子级:

不确定日期标准是否匹配,但这种通用形式更简单。 BETWEEN 在相同的日期上也匹配。

SELECT t1.id
FROM tbltools t1
JOIN tbltools t2
  ON t2.parent_id = t1.id
  AND t1.startdate BETWEEN t2.startdate AND t2.enddate
  AND t1.enddate BETWEEN t2.startdate AND t2.enddate
JOIN tblbooking b 
  ON t2.parent_id = b.id
WHERE b.status NOT IN ('Booked','Withdrawn')

关于mysql - MySQL中的两个select错误 “Every derived table must have its own alias”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54798283/

相关文章:

mysql - 创建表语法错误

c# - 获取数据表中不存在的所有文件

php - 不能 `Select DISTINCT`

mysql - 当我想创建区域搜索时,是否必须在数据库中为纬度和经度列创建索引?

mysql - Slick/HikariCP 给出 "too many connections"而不是超时

HTML Dropdown - 将两个表中的数据获取到 optgroup 和列表项中

java - Spring Boot 和 MySQL 的连接已关闭

mysql - 如何将点 append 到 LINESTRING SQL

sql - 询问所有 "up to"值 [MySQL]

mysql - 在没有存储过程的情况下有条件地在 MySQL 上提交事务