如何过滤MySQL查询以省略特定匹配

时间:2018-01-07 20:24:54

标签: php mysql sql

我为任何描述问题道歉,因为这是我的第一篇文章。我正在尝试编写一个查询,该查询将“返回所有未出售给Red公司的销售人员”以获取特定的一组表。我将列出下面的表格(以及我目前编写的查询),但有一个销售人员符合这两个标准(已售出和未售出)。我想看看如何从查询结果中省略它们,但我找不到方法。

Tables

到目前为止我的查询:

SELECT Salesperson.ID, Salesperson.Name
FROM Salesperson, Customer, Order
WHERE Salesperson.ID = Order.Sales_ID
AND Order.Cust_ID = Customer.ID
AND Order.Cust_ID <> (
                    SELECT Customer.ID
                    FROM Customer
                    WHERE Name = 'Red'
                    );

返回的结果:

ID   Name
4    Pam
5    Alex

我正在努力确保Pam不会返回,因为您看到Orders表中有两个项目,一个是公司Red,另一个是公司Yellow。由于她与黄公司的订单,我认为我的询问正在归还她。任何帮助或建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

首先,了解如何使用正确的join语法。一种方法使用group byhaving

SELECT s.ID, s.Name
FROM Salesperson s JOIN
     Orders o
     ON s.ID = o.Sales_ID JOIN
     Customer c
     ON o.Cust_ID = c.ID
GROUP BY s.ID, s.Name
HAVING SUM(CASE WHEN c.name = 'Red' THEN 1 ELSE 0 END) = 0;