我需要一些MySQL(5.6)查询的帮助。我不知道该如何开始。
我有一张桌子“刀片”。此表包含刀片服务器记录,包括以下列:
每个机箱在托架1-16中容纳16个刀片服务器。
我有另一张桌子“available_bays”。该表包含以下列:
我需要一个将扫描刀片表的查询,并且对于每个机箱少于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表中插入记录。
非常感谢有关创建此查询的任何帮助。
答案 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;