-1

我有以下表格: -

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@ localhostSQL SECURITY DEFINER VIEW pc_config2AS select ausername作为usernameapc_nameAS pc_name,if(( p. hardware= 'motherboard'), c. model_no, NULL) AS motherboard_model_no,if(( p. hardware= 'cpu'), p. value, NULL) AS cpu(GHz),if(( p. hardware= 'RAM'), p. value, NULL) AS RAM(GB),if(( p. hardware= 'HDD'), p. value, NULL) AS HDD(GB),if(( p. hardware= 'monitor'), p. value, NULL) AS Montior, d. ip_address_192_168_1_作为ip_address_192_168_1dos_idASOS从 (((pc_assign a加入pc_detail don(( a. pc_name= d. pc_name))) 加入pc_configuration con(( d. pc_name= c. pc_name))) 加入hw_property p(( c. hw_serial_no= p. hw_serial_no)))

输出是: -

username    pc_name motherboard_model_no    cpu(GHz)    RAM(GB) HDD(GB) Montior   ip_address_192_168_1  OS
nitu.dhaka      pc1     NULL                4.5         NULL    NULL    NULL        208                 1
soha            pc1     NULL                4.5         NULL    NULL    NULL        208                 1
nitu.dhaka      pc1     mboard              NULL        NULL    NULL    NULL        208                 1
soha            pc1     mboard              NULL        NULL    NULL    NULL        208                 1
nitu.dhaka      pc1     NULL                4.5         NULL    NULL    NULL        208                 1
soha            pc1     NULL                4.5         NULL    NULL    NULL        208                 1
nitu.dhaka      pc1     mboard              NULL        NULL    NULL    NULL        208                 1
soha            pc1     mboard              NULL        NULL    NULL    NULL        208                 1

这里实际发生的是,当查询在主板前运行时,其所有对应的字段都将为空。这是由于 if(( p. hardware= 'motherboard'), c. model_no, NULL) AS motherboard_model_no The Null 在第二部分。是否有可能没有第二个选项的查询(比如这里的 null )

我想输出如下内容:- 用户名 pc_name 主板_型号_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 And here我只插入了主板和 cpu 的值。如果我将为其他字段插入值,它将再次重复。我如何删除这些大量的 null

4

1 回答 1

-1

你寻找的东西没有意义:让我们看看:

对于每个查询,您都会创建一个包含查询结果的动态表。桌子总是长方形的,不能有其他形状。矩形结构具有行和列,它们定义了单元格。一个细胞必须存在,不能有一个“洞”。也许单元格是空的或取值为 NULL(从技术上讲,这是“更好”的 emtpy 值)。但它确实存在。

因此,当您设计查询时,您必须定义进入每个单元格的值。如果您使用条件语句,您可以在运行时决定选择哪个值,但您必须选择一个值,无论是哪个值。您不能决定创建或填充单元格。

所以剩下的问题只有:你想分配什么值作为“无价值”?从技术上讲,NULL 对于处理单元格是一件好事。但是如果你想呈现表格,它可能不太适合,除非你没有实现一种人类可读的方式来符号化“NULL”(可能是“-/-”?)。所以也许你想要做的就是在条件的 else 部分使用空字符串而不是 NULL?这将提供一个表格,当直接可视化时,该表格不会在“空”单元格中显示任何值。所以只需在你的 else 部分替换 NULL :if((p.hardware = 'monitor'),p.value,'')一切都很好。

于 2013-09-19T06:19:02.343 回答