嗨,我是 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/