Mysql 具有右连接的SQL视图
我必须创建一个视图来显示数据库中订单的概览。概述不需要订单项目,只需要订单id、订单日期、客户名称、订单总额和订单状态。数据库中有两个表,分别包含客户详细信息(一个用于注册用户,一个用于未注册用户)、shop_customer和shop_temp_customer 我需要该视图从相关表中提取客户的名字和姓氏,以便我可以将其显示在我的订单概览页面上 以下是表格结构: 店铺订单:Mysql 具有右连接的SQL视图,mysql,sql,join,views,Mysql,Sql,Join,Views,我必须创建一个视图来显示数据库中订单的概览。概述不需要订单项目,只需要订单id、订单日期、客户名称、订单总额和订单状态。数据库中有两个表,分别包含客户详细信息(一个用于注册用户,一个用于未注册用户)、shop_customer和shop_temp_customer 我需要该视图从相关表中提取客户的名字和姓氏,以便我可以将其显示在我的订单概览页面上 以下是表格结构: 店铺订单: Column Name Column Type Null Default order_i
Column Name Column Type Null Default
order_id int(11) No None
order_date int(255) No None
order_customer_id int(11) Yes NULL
order_temp_customer_id int(11) Yes NULL
order_postage double(11,2) No None
order_discount double(11,2) No None
order_total double(11,2) No None
order_status tinyint(1) No None
order_id order_date order_customer_id order_temp_customer_id order_postage order_discount order_total order_status
1 1322697540 2 NULL 12.50 0.00 1012.50 0
2 1322697540 NULL 1 13.00 0.00 1200.00 1
店铺及顾客:
Column Name Column Type Null Default
customer_id int(11) No None
customer_title varchar(255) No None
customer_forename varchar(255) No None
customer_surname varchar(255) No None
customer_company varchar(255) No None
customer_contact_number varchar(255) No None
customer_email varchar(255) No None
customer_password varchar(255) No None
customer_reference varchar(255) No None
customer_marketing tinyint(1) No None
customer_active tinyint(1) No None
customer_decomission_date int(11) No None
Column Name Column Type Null Default
temp_customer_id int(11) No None
temp_customer_title varchar(255) No None
temp_customer_forename varchar(255) No None
temp_customer_surname varchar(255) No None
temp_customer_company varchar(255) No None
temp_customer_contact_number varchar(255) No None
temp_customer_email varchar(255) No None
temp_customer_reference varchar(255) No None
temp_customer_decomission_date int(11) No None
商店临时顾客:
Column Name Column Type Null Default
customer_id int(11) No None
customer_title varchar(255) No None
customer_forename varchar(255) No None
customer_surname varchar(255) No None
customer_company varchar(255) No None
customer_contact_number varchar(255) No None
customer_email varchar(255) No None
customer_password varchar(255) No None
customer_reference varchar(255) No None
customer_marketing tinyint(1) No None
customer_active tinyint(1) No None
customer_decomission_date int(11) No None
Column Name Column Type Null Default
temp_customer_id int(11) No None
temp_customer_title varchar(255) No None
temp_customer_forename varchar(255) No None
temp_customer_surname varchar(255) No None
temp_customer_company varchar(255) No None
temp_customer_contact_number varchar(255) No None
temp_customer_email varchar(255) No None
temp_customer_reference varchar(255) No None
temp_customer_decomission_date int(11) No None
以下是我的视图代码,但它没有拉入任何数据项:
CREATE VIEW shop_order_view_all_preview AS
SELECT o.order_id, o.order_date, c.customer_forename, c.customer_surname, tc.temp_customer_forename, tc.temp_customer_surname, o.order_total, o.order_status
FROM shop_orders o
RIGHT JOIN shop_customers c
ON c.customer_id = o.order_customer_id
RIGHT JOIN shop_temp_customers tc
ON tc.temp_customer_id = o.order_customer_id
有什么想法吗
编辑:
以下是表格中的一些数据:
店铺订单:
Column Name Column Type Null Default
order_id int(11) No None
order_date int(255) No None
order_customer_id int(11) Yes NULL
order_temp_customer_id int(11) Yes NULL
order_postage double(11,2) No None
order_discount double(11,2) No None
order_total double(11,2) No None
order_status tinyint(1) No None
order_id order_date order_customer_id order_temp_customer_id order_postage order_discount order_total order_status
1 1322697540 2 NULL 12.50 0.00 1012.50 0
2 1322697540 NULL 1 13.00 0.00 1200.00 1
店铺(顾客)
customer_id customer_title customer_forename customer_surname customer_company customer_telephone customer_email customer_password customer_reference customer_marketing customer_active customer_decomission_date
2 Mr b a d 044444 a@test.com 098f6bcd4621d373cade4e832627b4f6 Poster / Flyer 1 1 0
temp_customer_id temp_customer_title temp_customer_forename temp_customer_surname temp_customer_company temp_customer_contact_number temp_customer_email temp_customer_reference temp_customer_decomission_date
1 Mr e asy NULL 04444 test@test.com Google 1322697540
车间温度客户:
customer_id customer_title customer_forename customer_surname customer_company customer_telephone customer_email customer_password customer_reference customer_marketing customer_active customer_decomission_date
2 Mr b a d 044444 a@test.com 098f6bcd4621d373cade4e832627b4f6 Poster / Flyer 1 1 0
temp_customer_id temp_customer_title temp_customer_forename temp_customer_surname temp_customer_company temp_customer_contact_number temp_customer_email temp_customer_reference temp_customer_decomission_date
1 Mr e asy NULL 04444 test@test.com Google 1322697540
尝试使用左连接而不是右连接,因为包含所有订单的表位于左侧:
CREATE VIEW shop_order_view_all_preview
AS
SELECT
o.order_id,
o.order_date,
c.customer_forename,
c.customer_surname,
tc.temp_customer_forename,
tc.temp_customer_surname,
o.order_total,
o.order_status
FROM shop_orders o
LEFT JOIN shop_customers c ON c.customer_id = o.order_customer_id
LEFT JOIN shop_temp_customers tc ON tc.temp_customer_id = o.order_customer_id
这可能无法解决问题,但我会先尝试一下。尝试使用左连接,而不是右连接,因为包含所有订单的表位于左侧:
CREATE VIEW shop_order_view_all_preview
AS
SELECT
o.order_id,
o.order_date,
c.customer_forename,
c.customer_surname,
tc.temp_customer_forename,
tc.temp_customer_surname,
o.order_total,
o.order_status
FROM shop_orders o
LEFT JOIN shop_customers c ON c.customer_id = o.order_customer_id
LEFT JOIN shop_temp_customers tc ON tc.temp_customer_id = o.order_customer_id
这可能无法解决问题,但我会先尝试一下。最后一行有一个小问题:
CREATE VIEW shop_order_view_all_preview AS
SELECT o.order_id, o.order_date, c.customer_forename, c.customer_surname, tc.temp_customer_forename, tc.temp_customer_surname, o.order_total, o.order_status
FROM shop_orders o
LEFT JOIN shop_customers c
ON c.customer_id = o.order_customer_id
LEFT JOIN shop_temp_customers tc
ON tc.temp_customer_id = o.order_temp_customer_id
-- ^^^^^
-您正在将订单表中的永久客户id链接到临时客户表,即使订单表中有一个单独的字段用于临时客户id
编辑:将右连接更改为左连接-订单表应位于连接的内部。最后一行有一个小问题:
CREATE VIEW shop_order_view_all_preview AS
SELECT o.order_id, o.order_date, c.customer_forename, c.customer_surname, tc.temp_customer_forename, tc.temp_customer_surname, o.order_total, o.order_status
FROM shop_orders o
LEFT JOIN shop_customers c
ON c.customer_id = o.order_customer_id
LEFT JOIN shop_temp_customers tc
ON tc.temp_customer_id = o.order_temp_customer_id
-- ^^^^^
-您正在将订单表中的永久客户id链接到临时客户表,即使订单表中有一个单独的字段用于临时客户id
编辑:将右连接更改为左连接-订单表应位于连接的内部。试试这个
CREATE VIEW shop_order_view_all_preview AS
SELECT
shop_orders.order_id, shop_orders.order_date, shop_customers.customer_forename, shop_customers.customer_surname, shop_temp_customers.temp_customer_forename, shop_temp_customers.temp_customer_surname, shop_orders.order_total, shop_orders.order_status
FROM
shop_orders, shop_customers, shop_temp_customers
RIGHT JOIN shop_customers
ON customer_id = order_customer_id
AND
RIGHT JOIN shop_temp_customers
ON temp_customer_id = order_customer_id
试试这个
CREATE VIEW shop_order_view_all_preview AS
SELECT
shop_orders.order_id, shop_orders.order_date, shop_customers.customer_forename, shop_customers.customer_surname, shop_temp_customers.temp_customer_forename, shop_temp_customers.temp_customer_surname, shop_orders.order_total, shop_orders.order_status
FROM
shop_orders, shop_customers, shop_temp_customers
RIGHT JOIN shop_customers
ON customer_id = order_customer_id
AND
RIGHT JOIN shop_temp_customers
ON temp_customer_id = order_customer_id
代码似乎很好,您能从表中输入一些数据吗。@PhilFaceplantYoung,第二条
shop\u orders
记录上的order\u temp\u customer\u id
字段保存了一份订单日期的副本,不是shop\u temp\u customer
表中的temp\u customer\u id
值-这是否准确反映了您的数据?它确实反映了,更正了现在发布的代码。ty:)订单表中的order\u customer\u id
和order\u temp\u customer\u id
不能都有非空值?谢谢wildplasser,这已经更新了。代码看起来不错,你能从表中输入一些数据吗。@PhilFaceplantYoung,第二条shop\u orders
记录上的order\u temp\u customer\u id
字段保存的是order\u日期的副本,而不是shop\u temp\u customer\u id
表中的temp\u customer\u id
值-这是否准确地反映了您的数据?它确实反映了,现在发布了更正的代码。ty:)订单表中的order\u customer\u id
和order\u temp\u customer\u id
不能都有非空值?感谢wildplasser,该表已更新,只有在客户未注册时才称为temp,因此,客户和订单将在下单6个月后被删除。@PhilFaceplantYoung:关键是,根据客户是临时客户还是永久客户,在订单表上有单独的客户ID字段。另请参阅我对您的问题的评论。由于客户未注册,表isd仅称为temp,因此该客户和订单将在下单6个月后被删除。@PhilFaceplantYoung:关键是,根据客户ID是临时客户还是永久客户,您的订单表上有单独的字段。另请参阅我对您问题的评论。这将从shop_customers表中提取数据,而不是shop_temp_customer数据。但它会带来一些数据,就在那里+1我已经更新了我的答案,包括左连接-还有连接字段问题。您的连接字段问题是正确的。我假设联接字段是正确的;)这将从shop_customers表中提取数据,而不是shop_temp_customer数据。但它会带来一些数据,就在那里+1我已经更新了我的答案,包括左连接-还有连接字段问题。您的连接字段问题是正确的。我假设联接字段是正确的;)