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