如何在虚拟MySQL表中填充值?
我有一个可行的解决方案,但我想知道是否有人能想出更好的方法来获得同样的结果 我有两个表,一个用于设备,一个用于线路。每个设备都可以插入0到4条线路。我运行的查询只是获取单个设备的线路设置。因此,我过滤设备表以仅返回一行。因为我需要一行中的结果,所以我使用如何在虚拟MySQL表中填充值?,mysql,Mysql,我有一个可行的解决方案,但我想知道是否有人能想出更好的方法来获得同样的结果 我有两个表,一个用于设备,一个用于线路。每个设备都可以插入0到4条线路。我运行的查询只是获取单个设备的线路设置。因此,我过滤设备表以仅返回一行。因为我需要一行中的结果,所以我使用GROUP\u CONCAT 这些设备有一个MAC地址,我正在过滤这些设备的MAC地址 设备示例表格 +-------------+------------------+ | DeviceID | MACAddress |
GROUP\u CONCAT
这些设备有一个MAC地址,我正在过滤这些设备的MAC地址
设备示例
表格
+-------------+------------------+
| DeviceID | MACAddress |
+-------------+------------------+
| 900 | 'FFFFBBBB5555' |
+-------------+------------------+
+---------+-------------+-----------------+-------------------+
| LineID | DeviceID | LineNumber | Settings |
+---------+-------------+-----------------+-------------------+
| 100 | 900 | 1 | '{"scan":240, "enabled":true}'
| 101 | 900 | 3 | '{"scan":30, "enabled":false}'
+---------+-------------+-----------------+-------------------+
行的示例
表格
+-------------+------------------+
| DeviceID | MACAddress |
+-------------+------------------+
| 900 | 'FFFFBBBB5555' |
+-------------+------------------+
+---------+-------------+-----------------+-------------------+
| LineID | DeviceID | LineNumber | Settings |
+---------+-------------+-----------------+-------------------+
| 100 | 900 | 1 | '{"scan":240, "enabled":true}'
| 101 | 900 | 3 | '{"scan":30, "enabled":false}'
+---------+-------------+-----------------+-------------------+
--很抱歉表格布局,我不知道如何在starkoverflow.com中创建一个好的表格:(--
我正在运行的查询是获取设备可能具有的4行的行设置。因此,我始终需要4个设置,并用null填充空白
SELECT
Devices.DeviceID,
CONCAT( '[', GROUP_CONCAT( IFNULL( Lines.Settings, 'null' ) ORDER BY pad.LineNumber ), ']' ) AS settings_json_array
FROM
Devices
LEFT JOIN (
SELECT 1 AS LineNumber
UNION SELECT 2 AS LineNumber
UNION SELECT 3 AS LineNumber
UNION SELECT 4 AS LineNumber
) pad
ON true
LEFT JOIN Lines
ON ( Lines.DeviceID = Devices.DeviceID AND Lines.LineNumber = pad.LineNumber )
WHERE
Devices.MACAddress='FFFFBBBB5555';
结果是一行
+------------+----------------------------------------------------------------------------------+
| DeviceID | settings_json_array |
+------------+----------------------------------------------------------------------------------+
| 900 | '[{"scan":240, "enabled":true},null,{"scan":30, "enabled":false},null]' |
+------------+----------------------------------------------------------------------------------+
我想摆脱丑陋的pad
虚拟表
非常感谢。为什么要删除pad派生表?太多的UNION语句,我想知道是否有更奇特的解决方案。;)有一个包含1个字段、4个记录、1-4个值的真实表。SQL无法选择不存在的内容,因此您必须以某种方式生成4条记录。Thank@rahul-tripathi.Thank Shadow,但我宁愿保留派生表。;)为什么要放弃pad派生表?太多的UNION语句,我想知道是否有更奇特的解决方案。;)有一个包含1个字段、4个记录、1-4个值的实表。SQL无法选择不存在的内容,因此您必须以某种方式生成4条记录。Thank@rahul-tripathi.Thank Shadow,但我宁愿保留派生表。;)