Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.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_Join_Sql View - Fatal编程技术网

MySQL创建表/视图

MySQL创建表/视图,mysql,join,sql-view,Mysql,Join,Sql View,我不知道标题是否正确,但我的问题来了。 因此,我想在phpmyadmin中创建一个视图,使用下面几张表中的数据图片,该视图表示灯具的维护,其中包含多张表中的字段变电站、post_类型、区域、灯具_类型、故障和维护 以下是带有连接的表: 我以某种方式管理并创建了类似下图的内容,我使用这段代码创建了它: CREATE OR REPLACE VIEW v_lamp_I AS SELECT lamps.id, substation.code AS sub_code, substation.n

我不知道标题是否正确,但我的问题来了。 因此,我想在phpmyadmin中创建一个视图,使用下面几张表中的数据图片,该视图表示灯具的维护,其中包含多张表中的字段变电站、post_类型、区域、灯具_类型、故障和维护

以下是带有连接的表:

我以某种方式管理并创建了类似下图的内容,我使用这段代码创建了它:

      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
我已经设法创建了视图,但问题是在该视图中,我只能看到维护的行/lampssifra_lampe,只有4行。台灯 我在中有24个条目,只有4个维护条目。但是,我想查看所有24个条目,如果没有对特定灯进行维护,字段可以为空,日期格式为00-00-00,也可以为空,对于维护的条目/灯,我想显示日期字段

这是带入口的台灯。

这是带有维护日期的视图。如您所见,只有6个条目


我希望看到其余的条目,对于未维护的灯,条目可以为空或日期格式,如00-00-00,对于维护的灯,日期格式可以保持不变,简而言之,我希望看到所有条目,而不仅仅是维护的条目。谢谢你,很抱歉提出这么长的问题。我不知道如何构造有意义的简短问题,所以写下了所有内容

我不能很好地理解您的表名,所以我将把表连接留给您,但您应该查看连接以获得所需的视图。内部联接仅显示两个表都有值的完全匹配,您应该使用左联接,它显示从主表和从次表中选择的所有重新记录。使用left join时,第一个表应该具有要显示的24条记录,第二个表应该具有空值。这里的答案将帮助您:好的,我将尝试类似的方法,thx:我无法理解您的表名称,因此我将把表连接留给您,但您应该查看连接以获得所需的视图。内部联接仅显示两个表都有值的完全匹配,您应该使用左联接,它显示从主表和从次表中选择的所有重新记录。使用left join时,第一个表应该具有要显示的24条记录,第二个表应该具有空值。这里的答案将帮助您:好的,我将尝试类似的方法,thx:@Svinjica尝试这一个我做了,我得到这个1349-视图的SELECT在FROM子句中包含一个子查询。在分析过程中发现了3个错误。”需要一个表达式。在119号位置附近。在位置119附近,这种类型的子句以前被解析过。在位置121'@Svinjica附近的SELECT尝试一下我做的这个,我得到了这个1349-视图的SELECT在FROM子句中包含一个子查询。在分析过程中发现了3个错误。”需要一个表达式。在119号位置附近。在位置119附近,这种类型的子句以前被解析过。在位置121'@Svinjica处的SELECT附近-我出错了,我们无法在视图中使用子查询。试试这个。它很管用,谢谢!是否可能不是空值而是写入一些字符串,比如没有维护?是的,我们可以使用IFNULLDATE\u FORMATdate\u维护,%d.%m.%Y,'have no maintenance'作为date\u main,而不是date\u FORMATdate\u维护,%d.%m.%Y.作为date_main@Svinjica-我搞错了,我们不能在视图中使用子查询。试试这个。它很管用,谢谢!是否有可能不是空值而是写入一些字符串,比如没有维护?是的,我们可以使用IFNULLDATE\u FORMATdate\u维护,%d.%m.%Y,'have no maintenance'作为date\u main,而不是date\u FORMATdate\u维护,%d.%m.%Y.作为date\u main
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
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;