MySQL创建表/视图

问题描述:

我不知道标题是否正确,但这里是我的问题。因此,我想使用多个表中的数据(图片如下)创建View中的视图,这些视图代表了几个表中的字段(变电站,后期类型,区域,灯具类型,故障和维护)的维护情况。MySQL创建表/视图

这里是表与连接:enter image description here

我已经莫名其妙地管理和创建像这样(下图),这是我管理使用的代码块创建:

 CREATE OR REPLACE VIEW 
v_lamp_I 
AS 
SELECT 
lamps.id, 
substation.code AS sub_code, 
substation.name AS sub_name, 
lamps.lamp_code, 
post_type.descript AS post_ty, 
lamp_type.descript AS lamp_ty, 
area.descript AS area_name, 
rasvjeta.adress, 
DATE_FORMAT(date_maintenance, "%d.%m.%Y.") AS date_main, 
lamps.geo_long, 
lamps.geo_lat 
FROM lamps 
INNER JOIN substiation ON substiation.id = lamps.substiation_id 
INNER JOIN post_type ON post_type.id = lamps.post_type_id 
INNER JOIN lamp_type ON lamp_type.id = lamps.lamp_type_id 
INNER JOIN area ON area.id = rasvjeta.area_id 
INNER JOIN maintenance ON maintenance.lamps_id = lamps.id 

enter image description here

我已经设法创建视图,但问题是与该视图,我只能看到行/灯(sifra_lampe),这是维护,只有4.在表 我有24条目,并只有4条目但是,我希望看到所有24个条目,并且如果该特定灯没有维护,则字段可以用日期格式(00-00-00或可以为NULL)清空,并且对于维护的条目/灯I想成为可见的日期字段。

这是台灯与条目。 enter image description here

这里是带维护日期的视图。正如你所看到的,只有6个条目 enter image description here

我想看看其余的条目,对于没有维护条目可以为空或日期格式这样(00-00-00)和灯维护日期格式可以保持不变,简而言之,我希望看到所有条目不仅仅是维护的条目。谢谢你,对于长期的问题感到抱歉。我不知道如何构建有意义和短小的问题,因此写下了一切。

+0

,我不能让你的表名太多意义,所以我会离开桌子连接到你,但你应该考虑加入得到你想要的视图。内连接只显示完全匹配(两个表都有值),您应该使用左连接(显示主表中的所有重新记录并从辅助表中选择)。用左连接你的第一张表应该是有你想要显示的24条记录,而辅助表是具有“空”值的那张。 在这里的回答将帮助你: http://*.com/questions/406294/left-join-and-left-outer-join-in-sql-server – Zero

+0

好吧,我会尝试这样的事情,thx: ) – Svinjica

create or replace view 
v_lamp_I as 
SELECT lamps.id, 
substation.code AS sub_code, 
substation.name AS sub_name, 
lamps.lamp_code, 
post_type.descript AS post_ty, 
lamp_type.descript AS lamp_ty, 
area.descript AS area_name, 
rasvjeta.adress, 
lamps.geo_long, 
lamps.geo_lat 
FROM lamps 
INNER JOIN substiation ON substiation.id = lamps.substiation_id 
INNER JOIN post_type ON post_type.id = lamps.post_type_id 
INNER JOIN lamp_type ON lamp_type.id = lamps.lamp_type_id 
INNER JOIN area ON area.id = rasvjeta.area_id; 


CREATE OR REPLACE VIEW 
v_lamp_new 
AS 
select v_lamp_I.*,DATE_FORMAT(date_maintenance, "%d.%m.%Y.") AS date_main 
from v_lamp_I 
LEFT JOIN maintenance ON v_lamp_I.id = maintenance.lamps_id; 
+0

@Svinjica-我错了, – user3436157

+0

它的工作原理,thx!是否有可能不是NULL值而是写入一些字符串,如“没有维护?” – Svinjica

+1

是的,我们可以使用IFNULL(DATE_FORMAT(date_maintenance,“ %d。%m。%Y。“),'没有维护')AS date_main而不是DATE_FORMAT(date_maintenance,”%d。%m。%Y。“)AS date_main – user3436157

CREATE OR REPLACE VIEW 
v_lamp_I 
AS 
select tbl_lamp.*,DATE_FORMAT(date_maintenance, "%d.%m.%Y.") AS date_main 
from (SELECT lamps.id, 
substation.code AS sub_code, 
substation.name AS sub_name, 
lamps.lamp_code, 
post_type.descript AS post_ty, 
lamp_type.descript AS lamp_ty, 
area.descript AS area_name, 
rasvjeta.adress, 
lamps.geo_long, 
lamps.geo_lat 
FROM lamps 
INNER JOIN substiation ON substiation.id = lamps.substiation_id 
INNER JOIN post_type ON post_type.id = lamps.post_type_id 
INNER JOIN lamp_type ON lamp_type.id = lamps.lamp_type_id 
INNER JOIN area ON area.id = rasvjeta.area_id) as tbl_lamp 
LEFT JOIN maintenance ON tbl_lamp.id = maintenance.lamps_id 
+0

@Svinjica尝试这一个 – user3436157

+0

我做了,我得到这个#1349 - 视图的SELECT在FROM子句中包含一个子查询。在分析过程中发现3个错误。 '表达是预期的。 (靠近“(”在位置119) 意外的令牌(接近“(”在位置119) 此类型的子句先前已被解析(在位置121的“SELECT”附近)' – Svinjica