【问题标题】:SQLite: How to insert the same value to multiple columns?SQLite:如何将相同的值插入多个列?
【发布时间】:2016-06-14 06:08:39
【问题描述】:

我想为表中的所有列提供相同的值,即时间戳。假设列是未知的。 有什么办法可以做到这一点 INSERT INTO table VALUES ('one value'); 不指定列名?

更新:

假设我有一个名为“student”的表,其中包含“f_name”、“m_name”和“l_name”。

假设(假设)我做INSERT INTO student VALUES ('John');

然后我希望我的桌子看起来像这样。

-----------student------------
 f_name  |   m_name  |  l_name
------------------------------
  John   |    John   |   John    <--- (The record i just inserted)

【问题讨论】:

  • 可以对所有记录执行UPDATE。您可以简单地省略任何WHERE 限制。但是对于INSERT,这没有任何意义,因为 RDBMS 怎么会知道停止(或开始)插入所需数量的记录?
  • 这与行无关。反正就是一张唱片。我不知道如何进一步解释这一点。对不起。我要的实际上很简单。所有列只有一个值。
  • 你知道列数还是这个也不知道?
  • @TimBiegeleisen 请检查更新。这就是我能解释的。要回答你的问题,是的。列数也不知道。
  • 我能看到的唯一方法是首先查询表中的列。但强制您列出列是一种很好的做法。例如,如果一列的类型为TINYINT,会发生什么情况?您的插入可能会导致错误。一般来说,您不应该在整条记录中盲目插入数据。

标签: mysql sql sqlite


【解决方案1】:

这实际上可以在 postgres 中完成。我不认为你可以在 sqlite 中做到这一点。使用以下查询,您可以生成所需的插入语句,而无需知道表的列。将 MY_TABLE 替换为您在数据库中的表名。

SELECT 'INSERT INTO MY_TABLE ' || array_to_string(ARRAY(SELECT '' || c.column_name
        FROM information_schema.columns As c
            WHERE table_name = 'MY_TABLE' 
    ), ',') || ' VALUES (' ||
array_to_string(ARRAY(SELECT '' || '\'MY_VALUE\''
        FROM information_schema.columns As c
            WHERE table_name = 'MY_TABLE' 
    ), ',') || ');' 
    As sqlstmt

【讨论】:

  • 这正是我需要的,但在 SQLite 中。无论如何,谢谢。
【解决方案2】:

Sqlite 和 Mysql 不支持在单个查询上插入多表。

Sqlite http://www.sqlite.org/lang_insert.html

MySql http://dev.mysql.com/doc/refman/5.7/en/insert.html

但是,还有一些其他数据库支持此类功能,例如 Oracle。据我所知。

【讨论】:

    【解决方案3】:

    您可以使用UPDATE

    UPDATE TableName SET ColumnName = 'Value';
    

    这仅在您的表中已有数据时才有效。

    【讨论】:

    • 是的。我需要的是一张新唱片。
    【解决方案4】:

    如果你知道列数,那么你可以使用

    INSERT INTO table VALUES ('Cardinal',..........,'Cardinal');  //As many times as number of columns
    

    【讨论】:

    • 我认为这行不通。这里需要列名。
    • @TimBiegeleisen 根据 w3school.com 第一种形式没有指定将插入数据的列名,只指定它们的值:INSERT INTO table_name VALUES (value1,value2,value3,...);
    • 看看here。您看到的页面很可能是通用 SQL,而不是 MySQL 方言。
    【解决方案5】:

    如果你知道列名,你可以这样做:

    insert into student (f_name, m_name, l_name)
    select a, a, a from (select 'John' as a ) x
    

    适用于 mysql 和可能大多数其他数据库

    【讨论】:

    • 您是否错过了未在问题中指定列名
    猜你喜欢
    • 2010-10-31
    • 2011-10-22
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    相关资源
    最近更新 更多