我有以下表格: -
pc_assign(username,pc_name)
pc_detail(os_id,ipaddress,pc_name)
pc_configuration(pc_name,hw_serial_no,model_no)
hw_property(value,hardware,hw_serial_no)
bl_os(os_id, os_name,version)
我需要创建以下视图: -
pc_config(`username`,`pc_name`,`motherboard- model_no`,`cpu(GHz)`,`RAM(GB)`,`HDD(GB)`,`Montior`,`ip_address`,`OS`)
为此我写了以下查询: -
CREATE ALGORITHM = UNDEFINED DEFINER = root
@ localhost
SQL安全定义视图pc_config2
AS选择a
。username
AS username
,{ {1}}。a
AS pc_name
,if((pc_name
。p
='主板'),hardware
。{{ 1}},c
)AS model_no
,if((NULL
。motherboard_model_no
=' cpu'),p
。{{ 1}},hardware
)AS p
,if((value
。NULL
=' RAM'),cpu(GHz)
。{{ 1}},p
)AS hardware
,if((p
。value
=' HDD'),NULL
。{{ 1}},RAM(GB)
)AS p
,if({hardware
。p
=' monitor'),value
。{{ 1}},NULL
)AS HDD(GB)
,p
。hardware
AS p
,value
。NULL
AS {{1来自((Montior
d
加入ip_address_192_168_1_
ip_address_192_168_1
on(d
。os_id
= OS
。{{ 1}})))加入pc_assign
a
on(pc_detail
。d
= a
。pc_name
)))join {{1 } d
on((pc_name
。pc_configuration
= c
。d
)))
输出结果为: -
pc_name
这里出现的问题是当查询在主板上运行时所有其对应的字段都将为空。这是因为
if({c
。pc_name
='主板'),hw_property
。p
,c
)AS hw_serial_no
Null在第二部分。是否可能没有第二个选项的查询(如此处为null)
我想输出如下内容: - username pc_name motherboard_model_no cpu(GHz)RAM(GB)HDD(GB)Montior ip_addres s_192_168_1 OS nitu.dhaka pc1 mboard 4.5 NULL NULL NULL 208 1 soha pc1 mboard 4.5 NULL NULL NULL 208 1 在这里我只插入了主板和CPU的值。如果我将插入其他字段的值,它将再次得到重复。我如何删除这些空的
答案 0 :(得分:-1)
你寻找的东西没有意义:让我们看看:
使用每个查询创建一个包含查询结果的动态表。表总是长方形,不能采取其他形状。矩形结构具有行和列,这些定义单元格。细胞必须存在,不能有“洞”。也许单元格为空或取值为NULL(技术上称之为“更好”的emtpy值)。但确实存在。
因此,在设计查询时,您必须定义每个单元格中的值。如果您使用条件语句,您可以决定在运行中选择哪个值,但您必须选择一个值,无论哪个值。您无法决定不来创建或填充单元格。
所以剩下的问题只是:你想把什么价值分配为“没有价值”?从技术上讲,NULL对于处理单元格来说是一件好事。但是如果你想呈现表格,它可能不太适合,除非你没有实现一种人类可读的方式来象征“NULL”(也许是“ - / - ”?)。所以你想要做的就是在条件的else部分使用空字符串而不是NULL?这将提供一个表,当直接可视化时,该表在“空”单元格中不显示任何值。所以只需替换你的其他部分中的NULL:if((p.hardware = 'monitor'),p.value,'')
,一切都很好。