Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将“选择”和“值”与“插入到”一起使用_Sql_Sql Insert_Firebird - Fatal编程技术网

Sql 将“选择”和“值”与“插入到”一起使用

Sql 将“选择”和“值”与“插入到”一起使用,sql,sql-insert,firebird,Sql,Sql Insert,Firebird,我正在写一个存储过程。我知道如何将值从select传递到insert 但是,使用INSERT INTO是否可以同时使用值和选择值 Insert into table_1 (f1, f2, f3, f4, f5, f6, f7, f8, f9, FL1, FL2, FL3) Select :p_f1, :v_f2, :p_f3, :p_f4, abs(:v_f5 * :p_f5), abs(:v_f6 * :p_f6), :

我正在写一个存储过程。我知道如何将值从
select
传递到
insert

但是,使用
INSERT INTO
是否可以同时使用
值和
选择值

Insert into table_1 (f1, f2, f3, f4, f5, f6, f7, f8, f9,
      FL1, FL2, FL3)

      Select :p_f1, :v_f2, :p_f3, :p_f4,
        abs(:v_f5 * :p_f5),
        abs(:v_f6 * :p_f6),
        :v_f7, :v_f8, :v_9 from RDB$DATABASE
      UNION
      Select f_lookup_id from lookup_table where (f_res >= :v_res) And (f2_lookup_id = :p_id1)
      UNION
      Select f_lookup_id from lookup_table where (f_res >= :v_res) And (f2_lookup_id = :p_id2)
      UNION
      Select f_lookup_id from lookup_table where (f_res >= :v_res) And (f2_lookup_id = :p_id3);

我猜您想使用
SELECT
语句的结果集作为
INSERT
语句的输入?是的,这是可能的,看。可能导致您出现问题的部分原因是您没有使用
VALUES
关键字。在这种情况下,语句如下所示

INSERT INTO table (fields) SELECT ...
或者,如果希望在一条语句中同时包含“常量值”(如
插入到…值(…)
语句)和“动态值”(使用
选择
语句作为源),则可以合并它们,即

INSERT INTO table (fields)
     SELECT fields FROM tab_src ...
   UNION
     SELECT constants FROM RDB$DATABASE
其中,
常量
是适当类型的值列表


更新

好吧,我猜你想要的其实是

Insert into table_1 (f1, f2, f3, f4, f5, f6, f7, f8, f9, FL1, FL2, FL3)
VALUES(:p_f1, :v_f2, :p_f3, :p_f4,
        abs(:v_f5 * :p_f5),
        abs(:v_f6 * :p_f6),
        :v_f7, :v_f8, :v_9,
        (Select f_lookup_id from lookup_table where (f_res >= :v_res) And (f2_lookup_id = :p_id1)),
        (Select f_lookup_id from lookup_table where (f_res >= :v_res) And (f2_lookup_id = :p_id2)),
        (Select f_lookup_id from lookup_table where (f_res >= :v_res) And (f2_lookup_id = :p_id3))
)

很难说出你在问什么。你能举例说明你在做什么吗?你能猜出你想做什么吗?我能在一条语句中使用值并选择Insert into吗?我得到一个错误:SQL错误代码=-104。无效命令。列列表和变量列表的计数不匹配。我在上面的主线程中用通用字段名编写了SQL-请告知。感谢错误消息
列列表和变量列表的计数不匹配
非常清楚,不是吗?您的
INSERT
语句列出了12列,因此每个“源行”也必须有12列,并且这些列的类型必须与目标列的类型匹配。但是您联合的一些
SELECT
语句只有一列!对于源表中没有的字段,您可以使用NULL或其他(常量)默认值来代替字段名。是的,消息是明确的,但我在第一个select only中尝试了零。RDB$数据库也无法得出结论,因此感谢您的启发-我现在使用零,如下所示:f_lookup_id,0,0表示第一个语句,0,f_lookup_id、0等等-但使用UNION不会使零或null覆盖实际值?同样使用UNION将返回多行,但我只需要一行我先尝试了,但仍然得到多行查看更新的答案,select语句必须是Singleton selects(仅返回一行)。