我有两个如下所示的表:
SalesPeople
-----------
SalesID, FirstName, LastName, Supervisor
Members
-------
MemberID, Firstname, LastName, Region, SalesID
试图显示每个销售人员的 ID 以及为其分配的成员。我编写了以下 SQL 查询:
SELECT s.*
FROM salespeople s
INNER JOIN members m ON s.salesid = m.salesid
但是,如果销售人员未分配给任何成员,我需要对该输出说“未分配成员”。我还想将 MemberID 列标记为“客户”。
上面的代码有效,但是当我尝试将 Members MemberID 列标记为“Clients”时,出现错误:
SELECT s.*
FROM salespeople s
INNER JOIN members m AS Clients ON s.salesid = m.salesid
我的问题是:
如何显示销售人员的 SalesID
和匹配的 MemberID
。如果销售人员未分配给任何成员,则无论如何都可以显示:“未分配成员”。正如我上面所说,我需要将显示 MemberID
列的列标记为 Clients
。
如果这无论如何令人困惑,我非常乐意澄清。
最佳答案
试试这个:
SELECT s.*, COALESCE(m.memberId, 'No Members Assigned') clients
FROM salespeople s
LEFT JOIN members m ON s.salesid = m.salesid
当该销售人员没有成员时,LEFT JOIN
将使您的 m.memberId
为 null。
COALESCE
函数将返回作为输入发送的第一个非空参数。因此,在这种情况下,如果 m.memberId
为 null,则将返回 'No Members Assigned'
。
将两者结合起来的结果就是您所期望的。
关于MySQL JOIN、IF 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19623984/