【发布时间】:2016-01-08 01:48:26
【问题描述】:
我正在尝试执行这个大型查询。我执行一系列连接,然后从结果关系中我想执行另一个连接并过滤掉某些元组。
SELECT *
FROM
(
SELECT *
FROM
market_instrument
inner join exchange_instrument
on market_instrument.id = exchange_instrument.instrument_id
inner join Table1 on market_instrument.id = Table1.instrument_id
left join Table2 on market_instrument.id = Table2.instrument_id
left join `options`on market_instrument.id = `options`.instrument_id
left join Table3 on market_instrument.id = Table3.instrument_id
) as R
inner join Table4 on R.instrument_id = Table4.instrument_id
where Table4.fill_timestamp between CURDATE() - INTERVAL 30 DAY AND NOW();
R 是我所指的“连接系列”。我想 inner join R 和 Table4 然后过滤掉过去 30 天的结果关系(其中日期属性为 Table4.fill_timestamp)。我正在使用 SQLAlchemy,所以我想以某种方式将 R 保存到某个结果关系变量并对其执行单独的查询,但我不知道 SQLAlchemy 如何处理它,所以我想先尝试在 SQL 中执行整个查询.
我不断收到重复的列名称“instrument_id”错误。 instrument_id 是除market_instrument 之外的所有表的主键,它是相同的,但它被称为id。我可以做些什么来解决这个问题?
【问题讨论】:
-
您必须在子查询中指定表和列。例如。
SELECT * FROM (SELECT Table1.instrument_id,... -
但我不可能列出子查询结果中的所有列,我需要所有列
-
dev.mysql.com/doc/refman/5.7/en/from-clause-subqueries.html "子查询选择列表中的任何列都必须具有唯一的名称。"
-
您可以尝试使用 JOIN ... USING(instrument_id) - 请参阅此处stackoverflow.com/questions/13908249/…。抱歉,我没有时间检查并发布完整答案。
-
是什么阻止你列出所有的列,你说你不能,或者你的意思是你不想?