繁体   English   中英

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

[英]MySQL query to insert record into table based on records in another table

我需要MySQL(5.6)查询的帮助。 我不确定如何开始。

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

  • 附件名称
  • bay_number
  • 描述
  • 服务器名称
  • ...

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

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

  • 附件名称
  • bay_number
  • 状态
  • 保留的
  • reserved_by
  • 保留日期


我需要一个查询,它将扫描刀片服务器表,对于每个刀片少于16个的机箱,将其一行写入带有外壳名称和bay_number的available_bays表中。 使用的机柜托架可能不连续。 换句话说,机柜1中的服务器可能位于托架1-8、10、13-16中。 因此,在此示例中,我将需要在available_bays表中包含以下记录:

enclosure_name bay_number
enclosure01 9
enclosure01 11
enclosure01 12

另外,仅当尚未退出相同的enclosure_name和bay_number时,才需要将记录插入available_bays表中。

在创建此查询的任何帮助将不胜感激。

sqlFiddle是一个示例,这里我只为前三个托架生成available_bay,可以添加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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM