我正在尝试像
这样的东西 select customer_id, order_id from order_table where purchase_id = 10 OR
purchase_id = 25 OR
...
purchase_id = 25432;
由于查询太大,我遇到了各种各样的问题...如果我在一行中运行整个查询,我遇到了错误:
SP2-0027: Input is too long (> 2499 characters) - line ignored
如果将查询拆分为多行,则由于干扰了为输入查询的每一行打印的行号,查询会被破坏。如果我禁用行号,SQL>每条线路上的提示让我很烦恼。
如果从文本文件SQL> @query.sql
运行查询,则会出现相同的错误
(我过去没有遇到mysql的问题,但现在使用sqlplus)。
我不是shell脚本的专家,也不是python的专家。如果我可以获得有关如何将所有purchase_id放入文本文件,每行一个purchase_id并在脚本运行时将其提供给 sqlplus 查询的指示,将会有很大的帮助。
我做了足够的研究,但我仍然很欣赏指针。
答案 0 :(得分:1)
1)语法更改:
尝试使用'(10,25,2542,...)'而不是一系列的' OR'它可以减小sql语句的大小
2)逻辑变化:
语法可能会延迟不可避免的,但如果要排除很多id,仍会发生异常。
2a)的
直接修复是将查询分解为批次。您可以按照50个购买ID发出选择查询,直到涵盖所有ID。
2b)的
或者您可以查看更通用的方法来检索相同的查询结果。让我们假设您真正想要看到的是未确认订单的列表'。然后,您可以添加一个布尔字段来确认'而不是在where子句中使用一组购买ID。到order_table
并根据此标准进行选择。
答案 1 :(得分:1)
另一个想法:
创建一个表" query_ids" (一列)并输入order_id
子句中的所有WHERE
。
新查询将是:
select customer_id, order_id from order_table where purchase_id = ( select * from query_ids);