需要创建一个显示April Roberts订单的查询。我只需要输出来显示OrderID和OrderDate。这是我到目前为止所拥有的

时间:2017-10-29 21:50:36

标签: mysql sql

SELECT 
ORDER_ITEM.OrderID, 
ORDERS.OrderDate
FROM ORDER_ITEM LEFT JOIN ORDERS 
ON ORDER_ITEM.OrderID = ORDERS.OrderID 
LEFT JOIN PEOPLE 
ON ORDERS.CustomerID = PEOPLE.PeopleId AND ORDERS.EmployeeID = PEOPLE.PeopleId
where PEOPLE.FirstName + PEOPLE.LastName = 'April Roberts'

我的结果是输出0行。不知道我在这里做错了什么。

3 个答案:

答案 0 :(得分:0)

确保表格中的数据符合您的条件。例如你有一个名叫April Roberts的人的命令。如果您使用LEFT JOIN,则查询将返回所有结果,即使您没有该人的任何订单。因此,如果您只想要与此人联系的订单,INNER JOIN或简单地加入就可以了。

SELECT oi.OrderID, o.OrderDate 
FROM ORDER_ITEM oi 
JOIN ORDERS o ON oi.OrderID = o.OrderID 
JOIN PEOPLE p ON o.CustomerID = p.PeopleId
WHERE p.FirstName = 'April' AND p.LastName = 'Roberts'

答案 1 :(得分:0)

这应该更适合搜索(你使用的空间不存在)

SELECT OI.OrderID, O.OrderDate 
FROM ORDER_ITEM OI
LEFT JOIN ORDERS O ON OI.OrderID = O.OrderID 
LEFT JOIN PEOPLE P ON O.CustomerID = P.PeopleId AND O.EmployeeID = P.PeopleId 
WHERE P.FirstName='April' AND P.LastName = 'Roberts';

但是,从逻辑上讲,CustomerID和EmployeeID不能匹配同一个员工。您需要第二个链接到人

SELECT OI.OrderID, O.OrderDate 
FROM ORDER_ITEM OI
LEFT JOIN ORDERS O ON OI.OrderID = O.OrderID 
LEFT JOIN PEOPLE P ON O.CustomerID = P.PeopleId
LEFT JOIN PEOPLE E ON O.EmployeeID = E.PeopleId 
WHERE P.FirstName='April' AND P.LastName = 'Roberts';

答案 2 :(得分:0)

您的错误是您希望人们记录匹配同一订单的员工和客户,但客户当然永远不会与员工相等。

April Roberts是客户还是员工?确定然后从该客户或员工的订单表中选择数据:

select orderid, orderdate
from orders
where customerid in 
(
  select peopleid 
  from people 
  where firstname = 'April'
  and lastname = 'Roberts'
);

无需加入order_item表。根本不需要加入。仅在您想要加入数据时加入。

我正在使用IN,因为有两个四月罗伯茨。如果表格中存在限制,那么您可以将IN更改为=

如果您真的对与四月罗伯茨有关的订单感兴趣,不知道她是员工还是客户,那么您可以使用EXISTS代替:

select orderid, orderdate
from orders o
where exists
(
  select *
  from people p
  where p.firstname = 'April'
  and p.lastname = 'Roberts'
  and p.peopleid in (o.customerid, o.employeeid)
);

您的查询中还有另一个错误:

where PEOPLE.FirstName + PEOPLE.LastName = 'April Roberts'

您在此处添加了两个值(+用于数字添加),因此MySQL将字符串FirstNameLastName转换为数字。从以字母开头的字符串进行的这种转换会导致MySQL中的值为零,因此where 0 + 0 = 0始终为真。如果你明显地认为+会进行字符串连接(这是标准SQL中的||运算符和MySQL中的CONCAT函数),那么你可能已经得到where 'AprilRoberts' = 'April Roberts'这总是错误的。