2

我确实尝试遵循这个答案

但就我而言,我使用 pk id 供同一张表的其他字段使用

样品表:

1. 客户

领域:

Customer_ID、名称、Category_ID、 Realty_Firm

2.类别

领域:

类别 ID,描述

类别的样本数据:

Category_ID | Description
1           | Agent
2           | Broker

客户样本数据:

Customer_ID  | Name    | Category_ID | Realty Firm
1            | AgentName1  | 1           | 6
2            | AgentName2  | 1           | 6
3            | AgentName3  | 1           | 6
4            | AgentName4  | 1           | 6
5            | AgentName5  | 1           | 7
6            | BrokerName1 | 2           | null
7            | BrokerName2 | 2           | null

注 1: Realty_Firm 字段数据来自 Broker Customer ID(6 和 7 为 Category Broker 的 ID)

注 2: Realty_Firm 字段仅在选择的类别是 Agent(1) 时才需要

问题:我将如何进行按类别对客户进行分组的查询?看起来很容易,但问题是如何将 Realty_Firm 字段加入到同一张表的 Customer_ID 中?

Select Cat.Description, Custom.Name as Broker, Cust.Name as Agent From Customer as Cust 
Inner Join Category as Cat ON Cust.Category_ID=Cat.Category_ID 
INNER JOIN  Customer as Custom ON Custom.Customer_ID=Cust.Realty_Firm

上面的查询对具有不同别名的客户表进行了双重联接,但仅返回具有 Realty_Field 值(经纪人)的行,而不是代理的全部记录属于经纪人。

示例查询输出 (显示可红色记录而不是 ID,以便于参考和示例):

Description | Broker       | Agent
Broker      | BrokerName1  | AgentName1
Broker      | BrokerName1  | AgentName2
Broker      | BrokerName1  | AgentName3
Broker      | BrokerName1  | AgentName4
Broker      | BrokerName1  | AgentName5
4

2 回答 2

1
select a.name, b.name, c.description from customer a
left join customer b on a.realty_firm = b.customer_id
left join category c on b.category_id = c.category_iD
 where a.category_id = 1;

输出

AgentName1 |    BrokerName1 | Broker
AgentName2 |    BrokerName1 | Broker
AgentName3 |    BrokerName1 | Broker
AgentName4 |    BrokerName1 | Broker
AgentName5 |    BrokerName2 | Broker
于 2013-09-16T13:40:51.957 回答
1

尝试使用LEFT JOIN而不是INNER JOIN

Select Cat.Description, Custom.Name as Broker, Cust.Name as Agent From Customer as Cust 
Inner Join Category as Cat ON Cust.Category_ID=Cat.Category_ID 
LEFT JOIN  Customer as Custom ON Custom.Customer_ID=Cust.Realty_Firm
于 2013-09-16T13:27:00.587 回答