Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在虚拟MySQL表中填充值?_Mysql - Fatal编程技术网

如何在虚拟MySQL表中填充值?

如何在虚拟MySQL表中填充值?,mysql,Mysql,我有一个可行的解决方案,但我想知道是否有人能想出更好的方法来获得同样的结果 我有两个表,一个用于设备,一个用于线路。每个设备都可以插入0到4条线路。我运行的查询只是获取单个设备的线路设置。因此,我过滤设备表以仅返回一行。因为我需要一行中的结果,所以我使用GROUP\u CONCAT 这些设备有一个MAC地址,我正在过滤这些设备的MAC地址 设备示例表格 +-------------+------------------+ | DeviceID | MACAddress |

我有一个可行的解决方案,但我想知道是否有人能想出更好的方法来获得同样的结果

我有两个表,一个用于设备,一个用于线路。每个设备都可以插入0到4条线路。我运行的查询只是获取单个设备的线路设置。因此,我过滤设备表以仅返回一行。因为我需要一行中的结果,所以我使用
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,但我宁愿保留派生表。;)