【问题标题】:mysql table move insertionsmysql表移动插入
【发布时间】:2012-01-28 16:21:53
【问题描述】:

这可能很难理解,所以如果我需要更好地描述它,请告诉我。假设我有 3 个表 tableA、tableB 和 tableC,语法如下:

CREATE TABLE tableA (
    data_point_1 VARCHAR(30),
    data_point_2 VARCHAR(30),
    data_point_3 VARCHAR(30)
);

CREATE TABLE tableB (
    bid INTEGER AUTO_INCREMENT,
    cid INTEGER AUTO_INCREMENT,
    data_point_1 VARCHAR(30),
);

CREATE TABLE tableC (
    cid INTEGER AUTO_INCREMENT,
    data_point_2 VARCHAR(30),
    data_point_3 VARCHAR(30)
);

现在我要做的是将数据从 tableA 传输到 tableB 和 tableC。所以本质上我想要这样的东西:

INSERT INTO tableB
SELECT
    data_point_1,
    (SELECT cid FROM tableC WHERE (INSERT INTO tableC SELECT data_point_2, data_point_3 FROM tableA))
FROM tableA

我没有尝试上述方法,但我假设这是不可能的,因为 INSERT 不返回实际值(我需要一个我假设的选择),但我的问题是如何从 A 插入数据将其放入 C 中,然后同时从 C 中获取 id 并从 A 中获取另一个数据点,然后将它们都放入 B 中。

我想我可以将它分解为 2 个插入语句,然后在 C 上进行选择,其中 data_point_2 = data_point_2 和 data_point_3=data_point_3,但我想知道是否有一种方法可以在一个查询中做到这一点?我找不到任何东西,所以我想我会在这里问。

再次:我不想要 2 个单独的插入查询。我希望能够在 1 中做到这一点。(因为理论上我可能需要进一步抽象它)

【问题讨论】:

  • 没人回应吗?仍然没有看到一种可行的方法来做到这一点......
  • 您可能会要求不可能的事情(无论如何对于 MySQL)。我不确定您关心的是什么,但您可能会研究事务的工作方式。它们是一种让您几乎可以“同时发生”许多陈述的方式。
  • 从表面上看这可能是不可能的,因为没有人可以找到解决方案。谢谢=/

标签: mysql select insert transfer


【解决方案1】:

你可以在下面的两个语句中做到这一点:

INSERT INTO TableB(data_point_1) SELECT data_point_1 FROM TableA
INSERT INTO TablEc(data_point_2,data_point_3) SELECT data_point_2, data_point_3 FROM TableA

【讨论】:

  • 这不起作用,因为它无法将 tableB 指向 tableC。我们需要确保 tableB.cid 映射到 tableC 中的正确行。正如我已经提到的那样,我已经知道如何在 2 次插入中做到这一点......我想知道是否可以只用一个查询语句。
【解决方案2】:

解决方案看起来是没有解决方案 =/ 猜我必须在多个插入中进行。感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 2021-09-15
    • 1970-01-01
    • 2018-11-27
    • 2023-03-30
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    相关资源
    最近更新 更多