2016-03-15 107 views
0

我不知道標題是否正確,但這裏是我的問題。因此,我想使用多個表中的數據(圖片如下)創建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://stackoverflow.com/questions/406294/left-join-and-left-outer-join-in-sql-server – Zero

+0

好吧,我會嘗試這樣的事情,thx: ) – Svinjica

回答

1
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

1
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