Mysql 插入到union all子查询中

Mysql 插入到union all子查询中,mysql,sql,Mysql,Sql,我想在datashop中插入所有数据,其中shopdata使用单个dataid作为shopid, 我有两张桌子 第一数据 id 1 2 3 4 5 第二数据商店 dataid | shopid ----------------- 1 | 1 2 | 1 3 | 1 4 | 1 5 | 1 1 | 2 2 |

我想在datashop中插入所有数据,其中shopdata使用单个dataid作为shopid, 我有两张桌子

第一数据

 id 
 1
 2
 3
 4
 5
第二数据商店

 dataid   | shopid
 -----------------
    1     |    1 
    2     |    1 
    3     |    1 
    4     |    1 
    5     |    1 
    1     |    2 
    2     |    2 
    3     |    2
现在,我想用shopid在datashop中插入所有数据

我尝试使用查询,但不起作用

 INSERT INTO datashop( dataid , shopid ) 
 (Select id
 from (Select id from data
 Union all
 Select dataid from datashop )Z
 group by id as dataid , 3 as shopid) 
此查询未运行,显示多个错误

分析中发现5个错误

意外标记。(靠近)(“位置49处”)

应为表达式。(靠近)(“位置71处”)

意外标记。(靠近)(“位置71处”)

此类型的子句以前已分析过。(在位置72的“Select”附近)

无法识别的语句类型。(位置111处接近“all”)


这是您想要的语法:

insert into datashop(dataid, shopid) 
    Select id, 3 as shopid
    from (Select id from data
          Union all
          Select dataid from datashop
         ) Z
    group by id;
您遇到了几个小问题:

  • 您在查询后列出了列。这可能是语法问题的原因
  • 您在
    group by
    子句中有一个别名(与上一点相关)
  • 您的
    select
    没有适当的列数
  • select
    周围的括号是不必要的
另请注意:查询可以简化为:

insert into datashop(dataid, shopid) 
    Select id, 3
    from data
    Union
    Select dataid, 3
    from datashop;

union
删除重复项。

这是您想要的语法:

insert into datashop(dataid, shopid) 
    Select id, 3 as shopid
    from (Select id from data
          Union all
          Select dataid from datashop
         ) Z
    group by id;
insert into datashop(dataid, shopid)  
Select id as dataid, 3 as shopid
  from from data
Union 
Select id as dataid, 4 as shopid
  from from data
Union 
Select id as dataid, 5 as shopid
  from from data
您遇到了几个小问题:

  • 您在查询后列出了列。这可能是语法问题的原因
  • 您在
    group by
    子句中有一个别名(与上一点相关)
  • 您的
    select
    没有适当的列数
  • select
    周围的括号是不必要的
另请注意:查询可以简化为:

insert into datashop(dataid, shopid) 
    Select id, 3
    from data
    Union
    Select dataid, 3
    from datashop;

union
删除重复项。

规范不是很清楚

insert into datashop(dataid, shopid)  
Select id as dataid, 3 as shopid
  from from data
Union 
Select id as dataid, 4 as shopid
  from from data
Union 
Select id as dataid, 5 as shopid
  from from data
看起来您有一个表,我们将其称为“shop”,该表包含一个列“id”(整型?),表中有五行,值为1到5。看起来“id”列可能是表的主键,或者至少保证是唯一的且非null

然后,看起来您有了第二个表,您想用一些行填充该表。该表包含两列,一列名为id,另一列名为shopid

我们不知道这个表在模型中代表什么,所以我们只是猜测。在我看来,您可能在寻找笛卡尔产品,每个shop.id与其他每个shop.id匹配,包括两列相等的行

由于缺少另一个名称,我们将第二个表称为“shop_to_shop”

同样,这只是一个猜测……但您可能希望使用以下查询的结果填充shop_to_shop表:

  SELECT r.id   AS id
       , s.id   AS shopid
    FROM shop r
   CROSS
    JOIN shot s
   ORDER
      BY r.id
       , s.id
如果“shop”中的“id”是唯一的(同样,只是猜测),那么结果中不会有任何重复的元组。如果“shop\u to\u shop”表中已经有一些行,并且我们不想创建表中已经存在的行的任何重复,我们可以使用反联接

  SELECT r.id   AS id
       , s.id   AS shopid
    FROM shop r
   CROSS
    JOIN shot s
    LEFT
    JOIN shop_to_shop t
      ON t.id     = r.id
     AND t.shopid = s.id
   WHERE t.id IS NULL
   ORDER
      BY r.id
       , s.id
一旦我们得到一个SELECT语句,它返回我们要插入的行,不管是什么,通过在它前面加上“insert tablename(colname,colname)”将其转换为insert语句


规格不是很清楚

看起来您有一个表,我们将其称为“shop”,该表包含一个列“id”(整型?),表中有五行,值为1到5。看起来“id”列可能是表的主键,或者至少保证是唯一的且非null

然后,看起来您有了第二个表,您想用一些行填充该表。该表包含两列,一列名为id,另一列名为shopid

我们不知道这个表在模型中代表什么,所以我们只是猜测。在我看来,您可能在寻找笛卡尔产品,每个shop.id与其他每个shop.id匹配,包括两列相等的行

由于缺少另一个名称,我们将第二个表称为“shop_to_shop”

同样,这只是一个猜测……但您可能希望使用以下查询的结果填充shop_to_shop表:

  SELECT r.id   AS id
       , s.id   AS shopid
    FROM shop r
   CROSS
    JOIN shot s
   ORDER
      BY r.id
       , s.id
如果“shop”中的“id”是唯一的(同样,只是猜测),那么结果中不会有任何重复的元组。如果“shop\u to\u shop”表中已经有一些行,并且我们不想创建表中已经存在的行的任何重复,我们可以使用反联接

  SELECT r.id   AS id
       , s.id   AS shopid
    FROM shop r
   CROSS
    JOIN shot s
    LEFT
    JOIN shop_to_shop t
      ON t.id     = r.id
     AND t.shopid = s.id
   WHERE t.id IS NULL
   ORDER
      BY r.id
       , s.id
一旦我们得到一个SELECT语句,它返回我们要插入的行,不管是什么,通过在它前面加上“insert tablename(colname,colname)”将其转换为insert语句


插入到datashop(dataid,shopid)值(…)您认为()可能有点不合适吗?插入到datashop(dataid,shopid)值(…)不运行show same errors..Man on Man.首先让单个选择工作。注意您编写的代码。您试图插入两个列,但只选择一个列值。插入到datashop(dataid,shopid)值(…)您不认为()可能有点不合适吗?插入到datashop(dataid,shopid)值(…)不运行show same errors..Man on Man.首先让单个SELECT工作。请注意您编写的代码。您试图插入两个列,但只选择了一个列值。我运行了最后一个query。show error:#1222-使用的SELECT语句具有不同的列数columns@spencer:但是我想要更多的数据,比如e如何为id 4、5、6插入数据,此查询再次运行数据为同一id插入一次…@sanjayjoon…据我所知,所有查询的列数都正确。我运行了上一次查询。显示错误:#1222-使用的SELECT语句的列数不同columns@spencer:但我需要更多的数据,如如何插入