Mysql 如何在查询中使用SQL别名

Mysql 如何在查询中使用SQL别名,mysql,sql,Mysql,Sql,我有一个sql查询(如下)将记录插入数据库。目标是在数据库中只插入新的/唯一的条目。因此,如果该行在整个数据库中不存在,它将插入该行。我想让它只对instrumentSymbol中包含符号的行求值,而不是对整个数据库中的每一行求值 我遇到了这个语法错误,我已经查明是由于在InstrumentsStory的第SELECT 1行中使用了别名,其中instrumentSymbol='ZYME'作为f 如果删除WHERE instrumentSymbol={SYMBOL}条件,则此查询可以正常工作,但我

我有一个sql查询(如下)将记录插入数据库。目标是在数据库中只插入新的/唯一的条目。因此,如果该行在整个数据库中不存在,它将插入该行。我想让它只对instrumentSymbol中包含符号的行求值,而不是对整个数据库中的每一行求值

我遇到了这个语法错误,我已经查明是由于在InstrumentsStory的第
SELECT 1行中使用了别名,其中instrumentSymbol='ZYME'作为f

如果删除
WHERE instrumentSymbol={SYMBOL}
条件,则此查询可以正常工作,但我需要对其进行修改,以优化查询自身与之比较的记录集(从而缩短完成任务的时间)

我已经看了一遍,这让我相信这个问题没有错。有人能告诉我正确的方向吗

错误:

(sqlite3.OperationalError) near "AS": syntax error
[SQL: INSERT INTO instrumentsHistory (datetime, instrumentSymbol, observation, observationColName)
                    SELECT t.datetime, t.instrumentSymbol, t.observation, t.observationColName
                    FROM tempTable t
                    WHERE NOT EXISTS 
                        (SELECT 1 FROM instrumentsHistory WHERE instrumentSymbol = 'ZYME' AS f
                         WHERE t.datetime = f.datetime
                         AND t.instrumentSymbol = f.instrumentSymbol
                         AND t.observation = f.observation
                         AND t.observationColName = f.observationColName)]
编辑1: 正在添加完整的查询

 sql = f"""INSERT INTO instrumentsHistory (datetime, instrumentSymbol, observation, observationColName)
                SELECT t.datetime, t.instrumentSymbol, t.observation, t.observationColName
                FROM tempTable t
                WHERE NOT EXISTS 
                    (SELECT 1 FROM instrumentsHistory WHERE instrumentSymbol = '{symbol}' AS f
                     WHERE t.datetime = f.datetime
                     AND t.instrumentSymbol = f.instrumentSymbol
                     AND t.observation = f.observation
                     AND t.observationColName = f.observationColName)"""

这篇评论太长了

此代码:

WHERE NOT EXISTS (SELECT 1 FROM instrumentsHistory WHERE instrumentSymbol = 'ZYME' AS f
                  WHERE t.datetime = f.datetime

有多个错误。一行中有两个
WHERE
子句。在
WHERE
子句中使用了
as
。我猜这是一个副本和过去的错误,但不清楚您的意图。

这太长了,无法发表评论

此代码:

WHERE NOT EXISTS (SELECT 1 FROM instrumentsHistory WHERE instrumentSymbol = 'ZYME' AS f
                  WHERE t.datetime = f.datetime

有多个错误。一行中有两个
WHERE
子句。在
WHERE
子句中使用了
as
。我猜这是一个副本和过去的错误,但不清楚您的意图。

谢谢Gordon,最近的编辑中刚刚添加了完整的查询。目标是在数据库中只插入新的/唯一的条目。所以如果该行在整个数据库中不存在,它将插入该行。我希望它仅针对instrumentSymbol中具有符号的行计算该行,而不是针对整个数据库中的每一行进行计算感谢Gordon,最近的编辑中刚刚添加了完整查询。目标是只插入新的/唯一的e数据库中的ntries。因此,如果该行在整个数据库中不存在,它将插入该行。我希望它仅对instrumentSymbol中包含符号的行求值,而不是对整个数据库中的每一行求值替换查询文本中的
AS f WHERE
子字符串为
子字符串。这将不起作用,因为查询随后引用了表
'f
。例如
其中i.datetime=f.datetime
将抛出一个errorTrue。然后
来自instrumentsHistory其中instrumentSymbol='ZYME'AS f WHERE
必须替换为
来自instrumentsHistory AS f WHERE f.instrumentSymbol='ZYME'和
将查询文本中的子字符串替换为f,其中子字符串替换为和子字符串。这将不起作用,因为查询随后引用了表
'f
。例如,
其中i.datetime=f.datetime
将抛出一个错误true。然后从instrumentsHistory中引用
,其中symbol='ZYME'作为f,其中
必须替换为仪表历史中的
,其中f.instrumentSymbol='ZYME'和