Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.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 具有右连接的SQL视图_Mysql_Sql_Join_Views - Fatal编程技术网

Mysql 具有右连接的SQL视图

Mysql 具有右连接的SQL视图,mysql,sql,join,views,Mysql,Sql,Join,Views,我必须创建一个视图来显示数据库中订单的概览。概述不需要订单项目,只需要订单id、订单日期、客户名称、订单总额和订单状态。数据库中有两个表,分别包含客户详细信息(一个用于注册用户,一个用于未注册用户)、shop_customer和shop_temp_customer 我需要该视图从相关表中提取客户的名字和姓氏,以便我可以将其显示在我的订单概览页面上 以下是表格结构: 店铺订单: Column Name Column Type Null Default order_i

我必须创建一个视图来显示数据库中订单的概览。概述不需要订单项目,只需要订单id、订单日期、客户名称、订单总额和订单状态。数据库中有两个表,分别包含客户详细信息(一个用于注册用户,一个用于未注册用户)、shop_customer和shop_temp_customer

我需要该视图从相关表中提取客户的名字和姓氏,以便我可以将其显示在我的订单概览页面上

以下是表格结构:

店铺订单:

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我已经更新了我的答案,包括左连接-还有连接字段问题。您的连接字段问题是正确的。我假设联接字段是正确的;)