MySQL查询根据另一个表中的记录将记录插入表中

时间:2013-12-14 00:31:35

标签: mysql

我需要一些MySQL(5.6)查询的帮助。我不知道该如何开始。

我有一张桌子“刀片”。此表包含刀片服务器记录,包括以下列:

  • 机箱名称
  • 托架编号
  • 描述
  • 服务器名称
  • ...

每个机箱在托架1-16中容纳16个刀片服务器。

我有另一张桌子“available_bays”。该表包含以下列:

  • 机箱名称
  • 托架编号
  • 状态
  • 保留
  • reserved_by
  • reserved_date


我需要一个将扫描刀片表的查询,并且对于每个机箱少于16个刀片,请使用enclosure_name和bay_number向available_bays表写入一行。使用的机箱托架可能不连续。换句话说,enclosure1中的服务器可以位于托架1-8,10,13-16中。所以在这个例子中,我需要在available_bays表中得到以下记录:

enclosure_name bay_number
enclosure01 9
enclosure01 11
enclosure01 12

此外,只有当相同的enclosure_name和bay_number尚未退出时,才需要在available_bays表中插入记录。

非常感谢有关创建此查询的任何帮助。

1 个答案:

答案 0 :(得分:1)

sqlFiddle 就是这里的一个示例我只为前3个托架生成了available_bays,你可以添加UNION SELECT 4等等,最多16个。

INSERT INTO available_bays(enclosure_name,bay_number)
SELECT t3.enclosure_name,t3.bay_number
FROM
  (SELECT enclosure_name,bay_number FROM
    (      SELECT 1 as bay_number
     UNION SELECT 2
     UNION SELECT 3
     UNION SELECT 4
     UNION SELECT 5
     UNION SELECT 6
     UNION SELECT 7
     UNION SELECT 8
     UNION SELECT 9
     UNION SELECT 10
     UNION SELECT 11
     UNION SELECT 12
     UNION SELECT 13
     UNION SELECT 14
     UNION SELECT 15
     UNION SELECT 16)as t,
    (SELECT DISTINCT enclosure_name FROM blades)as t2
  )as t3
LEFT JOIN blades b
ON (b.bay_number = t3.bay_number AND b.enclosure_name = t3.enclosure_name)
LEFT JOIN available_bays ab
ON (ab.bay_number = t3.bay_number AND ab.enclosure_name = t3.enclosure_name)
WHERE  b.bay_number IS NULL
  AND ab.bay_number IS NULL;