Mysql - 从祖父母的FROM中的子查询中的祖父母的连接表中访问列

时间:2016-11-23 22:08:26

标签: mysql

WHERE内的FROM内的SELECT里面,SELECT field_one, field_two, field_three, field_one-field_three AS field_five, field_six FROM ( SELECT IFNULL( ( SELECT SUM(us.field_seven) AS field_one FROM table_one us WHERE us.rto_id = rto.relevant_field_one AND us.created >= ( SELECT IF( selected_date IS NULL, MIN(created), selected_date ) FROM ( SELECT IF( latest_date < DATE_SUB(CURDATE(), INTERVAL rtt.relevant_field_two DAY), CURDATE(), MAX(prevdate) ) AS selected_date, created FROM ( SELECT created, @calc_prevdate as prevdate, DATEDIFF(@calc_prevdate, created) AS diff, @calc_prevdate := created FROM ( SELECT sto.created FROM table_one sto WHERE sto.rto_id = rto.relevant_field_one UNION ALL SELECT stt.created FROM table_two stt WHERE stt.rto_id = rto.relevant_field_one ORDER BY created DESC ) AS x CROSS JOIN ( SELECT @calc_prevdate := NULL ) as vars ) AS z CROSS JOIN ( SELECT MAX(created) AS latest_date FROM( SELECT sto.created FROM table_one sto WHERE sto.rto_id = rto.relevant_field_one UNION ALL SELECT stt.created FROM table_two stt WHERE stt.rto_id = rto.relevant_field_one ORDER BY created DESC ) as z ) AS y WHERE diff > rtt.relevant_field_two ) as w ) GROUP BY us.rto_id ),0 ) AS field_one, IFNULL( ( SELECT SUM(tt.field_seven) AS field_three FROM table_two tt WHERE tt.rto_id = rto.relevant_field_one AND tt.created >= ( SELECT IF( selected_date IS NULL, MIN(created), selected_date ) FROM ( SELECT IF( latest_date < DATE_SUB(CURDATE(), INTERVAL rtt.relevant_field_two DAY), CURDATE(), MAX(prevdate) ) AS selected_date, created FROM ( SELECT created, @calc_prevdate as prevdate, DATEDIFF(@calc_prevdate, created) AS diff, @calc_prevdate := created FROM ( SELECT sto.created FROM table_one sto WHERE sto.rto_id = rto.relevant_field_one UNION ALL SELECT stt.created FROM table_two stt WHERE stt.rto_id = rto.relevant_field_one ORDER BY created DESC ) AS x CROSS JOIN ( SELECT @calc_prevdate := NULL ) as vars ) AS z CROSS JOIN ( SELECT MAX(created) AS latest_date FROM( SELECT sto.created FROM table_one sto WHERE sto.rto_id = rto.relevant_field_one UNION ALL SELECT stt.created FROM table_two stt WHERE stt.rto_id = rto.relevant_field_one ORDER BY created DESC ) as z ) AS y WHERE diff > rtt.relevant_field_two ) as w ) GROUP BY tt.rto_id ), 0 ) AS field_three, IFNULL( ( SELECT COUNT(*) AS field_two FROM table_two tt WHERE tt.rto_id = rto.relevant_field_one GROUP BY tt.rto_id ), 0 ) AS field_two, IFNULL( ( SELECT GREATEST( IFNULL(MAX(us.created), 0), IFNULL(MAX(tt.created), 0) ) AS field_six FROM table_one us LEFT JOIN table_two tt ON us.rto_id = tt.rto_id WHERE us.rto_id = rto.relevant_field_one GROUP BY us.rto_id ), 0 ) AS field_six FROM relevant_table_one rto LEFT JOIN relevant_table_two rtt ON rto.rtt_id = rtt.id WHERE rto.rtt_id = ? GROUP BY rto.relevant_field_one ) v ORDER BY id ASC; 内的另一个子查询内部加入另一个表,我需要从该连接表中访问一列。

编辑以添加更完整的示例:

relevant_table_one.relevant_field_one

鉴于该查询,我需要从子查询中访问relevant_table_two.relevant_field_twoFROM,但restrictions on subqueries表示您无法访问{{1}内的子查询中的父表}}

1 个答案:

答案 0 :(得分:0)

我设法解决了这个问题(到目前为止我认为),在可访问的select中添加@rfo := relevant_field_one@rft := relevant_field_two,然后引用创建的变量而不是嵌套中的列在相关的地方查询。

我可能只是得到误报,但到目前为止,解决方案似乎正在发挥作用。