首页 > 解决方案 > 每个项目的 MYSQL 插入

问题描述

也许我的问题很愚蠢,但是......在 mysql 中有没有办法(没有 php 或其他)为另一个表中的每个对象插入数据到一个表中?

例如:

Table: Items
Item 1    ItemClass 1
Item 2    ItemClass 2
Item 3    ItemClass 1


Table: File_Class
File 1 ItemClass 1
File 2 ItemClass 1
File 3 ItemClass 2
File 4 ItemClass 1
File 5 ItemClass 2

我可以只使用 MYSQL 将每个项目的项目/文件组合插入到 File_Status 表中,如下所示:?类似的东西

在最好的情况下,包括检查组合是否是唯一的并且不存在。

For Each Item in Table Items 
- For Each File From File_Class Where ItemClass = ItemClass(in Items)
- Intert Into File Status itemID, FileID, status = open




Table: File_status
ID    itemID   File     Status
1     Item 1   File 1   open
2     Item 1   File 2   open
3     Item 1   File 4   open

我知道如何用 php/mysql 做到这一点,但也许有一种方法可以只用一个查询来做到这一点。

感谢您的任何想法

标签: mysqlsql

解决方案


你的逻辑表明:

insert into file_status (itemId, file, status)
    select i.itemId, fc.file, 'open'
    from items i cross join
         file_class fc;

但是,这会插入 15 行。如果你想“对齐”表格,那么你需要一些方法来加入它们。 row_number()提供以下信息:

insert into file_status (itemId, file, status)
    select i.itemId, fc.file, 'open'
    from (select i.*, row_number() over (order by itemId) as seqnum
          from items i
         ) i join
         (select fc.*, row_number() over (order by file) as seqnum
          from file_class fc
         ) fc
         on i.seqnum = fc.seqnum;

推荐阅读