MySQL JOIN、IF 查询

标签 mysql sql

我有两个如下所示的表:

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/

相关文章:

php - sql、返回和格式化所有数组数据的正确方法是什么?

php - MYSQL 多条件条件插入

php - MySQL 查询更新不正确

php - 如何连接到 WAMP 服务器上的 MySQL?

php - 无法使用 php pred-statement 将记录插入 mysql 表

sql - 如何在Oracle中获得当前的GMT

php - 如何将 SQL 查询结果更改为 superfish 下拉菜单?

php - 在 php-sql 中,我想在第一个搜索结果表中重新搜索。

mysql - mysql会保证二进制日志(bin log)原子地写入Table_map事件/Write_rows事件/Xid事件吗?

php - mysql 注入(inject)和跨站点脚本 - CodeIgniter