【问题标题】:SQL insert multiple couples with kind of array in R-value?SQL在R值中插入多对数组类型的数组?
【发布时间】:2012-10-19 14:32:35
【问题描述】:

我想知道是否可以在 INSERT 语句中插入多个值,如下所示:

INSERT INTO myTable VALUES ( constant , ARRAY(multipleValues) );

如果这不可能,我将使用存储过程。我的问题更多是出于好奇而不是出于真正的目的,因为我正在使用一个工作循环,它一次插入一次记录并且可以完成这项工作。

【问题讨论】:

  • 为什么这个问题同时被标记为mysqlplsql?您使用的是哪个 RDBMS?
  • @eggyal:糟糕,我刚刚注意到了。好像我点击标签太快了,没注意……那边没有PL/SQL,你说的对。

标签: mysql sql plsql


【解决方案1】:

MySQL 没有数组数据类型。为了将应用程序代码中的数组传递到 MySQL 查询中,您需要将其分解为字符串。

你可以这样做:

INSERT INTO myTable
VALUES
  (constant, value1),
  (constant, value2),
  (constant, value3),
  -- etc.

或者:

INSERT INTO myTable
SELECT constant, t.value
FROM (
  SELECT value1 AS value
UNION ALL
  SELECT value2
UNION ALL
  SELECT value3
-- etc.
) AS t

通常第一种形式更简洁,但如果有大量常量列,第二种形式可能更有用。

【讨论】:

  • 好的,为这个想法 +1。您认为加入可以为我带来 const 的“左侧”吗?
  • 我确信可以使用 SELECT lefSide, rightSide FROM (SELECT 'const' AS leftSide FROM DUAL) T1 LEFT OUTER JOIN (SELECT rightSide FROM myTable) T2 ;不是吗?
  • @Benj:如上所述,直接使用文字有什么问题?不确定我是否关注。
  • UNION ALL 不会很安静/长有数千个值吗?
  • 我明白什么是“复杂”:我没有解释我想做什么。我想知道是否可以构建一个类似于“INSERT INTO table VALUES (" + myConst + "), SOME_ARRAY_TRICK(" + implode(array of values) + ");" 的查询。我终于用一个简单的 INSERT ... SELECT myConst,myRValues FROM myTable 构建了这个查询。非常感谢eggyal,您的询问使我陷入困境。我接受这个答案,因为它帮助我解决了我的问题。
【解决方案2】:

您可以在 VALUES 部分插入多条记录,如下所示

 INSERT INTO example (example_id, name, value, other_value)
 VALUES
 (100, 'Name 1', 'Value 1', 'Other 1'),
 (101, 'Name 2', 'Value 2', 'Other 2'),
 (102, 'Name 3', 'Value 3', 'Other 3'),
 (103, 'Name 4', 'Value 4', 'Other 4');

【讨论】:

  • 对不起,但这不是我想要的意思:我正在寻找一种方式,只将一个值传递给“左侧”,将很多值传递给“右侧”,使 SQL 插入记录,如 [ const , value[i] ]
【解决方案3】:

As I said in comment to @eggyal, 我找到了解决方案:

INSERT INTO
    t1
SELECT
    "theConstant",
    subValue
FROM
    subTable
;

感谢@eggyal 的主要想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多