【问题标题】:SQL. When I trying to do something like "INSERT INTO Table VALUES(x1,x2,x3) - can the x1 x2 x3 be sql queries, like SELECT <...>SQL。当我尝试执行类似“INSERT INTO Table VALUES(x1,x2,x3) - x1 x2 x3 可以是 sql 查询,例如 SELECT <...>
【发布时间】:2013-11-27 08:00:41
【问题描述】:

我想做这样的事情:

QSqlQuery q;
q.prepare("insert into Norm values(select from Disc id_disc WHERE name_disc=?, select from Spec code_spec WHERE name_spec=?,?");
q.addBindValue(MainModel->data(MainModel->index(MainModel->rowCount()-1, 1)).toString());
q.addBindValue(ui->comboBox->currentText());
q.addBindValue(MainModel->data(MainModel->index(MainModel->rowCount()-1, 2)).toString());
q.exec();

但它不起作用。当然对于一个明显的错误在哪里的人来说,也许他会告诉我如何正确地做。

【问题讨论】:

  • Sql不是我最强的,但是在准备之后,“incert”应该是“insert”吗?
  • 你试过用“Insert”代替“incert”

标签: sql sqlite qsqlquery qsqltablemodel


【解决方案1】:

首先你犯了拼写错误。它的“插入”不是“插入” 是的,我们可以在 INSERT 查询中插入 SELECT 查询。 例如:

INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;

【讨论】:

    【解决方案2】:

    INSERT ... SELECT ... 用于插入多条记录,或者要插入的大多数值来自同一条记录。

    如果你想插入一条记录,其中的值来自多个表,你可以像尝试做的那样使用子查询,但你必须使用正确的语法: scalar subqueries必须写在括号内,SELECT必须正确写成SELECT value FROM table:

    INSERT INTO Norm
    VALUES ((SELECT id_disc FROM Disc WHERE name_disc = ?),
            (SELECT code_spec FROM Spec WHERE name_spec = ?),
            ?)
    

    【讨论】:

      【解决方案3】:

      如果你想要来自两个表的数据,你必须首先编写一个返回假数据的查询——使用JOIN、UNION、子查询……

      那么,做吧

      INSERT INTO target_table SELECT ...
      

      【讨论】:

        猜你喜欢
        • 2015-06-04
        • 2018-09-24
        • 1970-01-01
        • 2016-02-04
        • 1970-01-01
        • 2019-10-17
        • 1970-01-01
        • 1970-01-01
        • 2017-03-05
        相关资源
        最近更新 更多