解释我的问题的最简单方法可能是显示表格和我想要得到的结果。我最近尝试的查询位于底部(不起作用)
我有以下表格(为简单起见,删除了一堆列):
客户表:
------------------------- | client_id | name | ------------------------- | client_1 | Bob | ------------------------- | client_2 | Jane | ------------------------- | client_3 | Amy | -------------------------
合约表:
--------------------------------------------- | contract_id | client_id | amount | date | --------------------------------------------- | contract_1 | client_1 | $5 | 01/02 | --------------------------------------------- | contract_2 | client_1 | $25 | 21/03 | --------------------------------------------- | contract_3 | client_2 | $40 | 25/05 | ---------------------------------------------
会话表:
------------------------------------------ | session_id | client_id | contract_id | ------------------------------------------ | session_1 | client_1 | contract_1 | ------------------------------------------ | session_2 | client_2 | contract_3 | ------------------------------------------ | session_3 | client_2 | contract_3 | ------------------------------------------ | session_4 | client_1 | contract_2 | ------------------------------------------ | session_5 | client_1 | contract_1 | ------------------------------------------
我需要加入表并按 client_id 和 contract_id 对所有行进行分组,如下所示:
client 1, Bob
|___ contract_1, $5, 01/02
|___ Session 1
|___ Session 5
|___ contract_2, $25, 21/03
|___ Session 4
client 2, Jane
|___ contract_3, $40, 25/05
|___ Session 2
|___ Session 3
client 3, Amy
我最近的尝试是对表进行完全外部联接,并按 client_id 和 contract_id 对结果进行分组。
SELECT * FROM
(SELECT
*
FROM
contracts
LEFT OUTER JOIN
clients
ON
clients.client_id = contracts.client_id
UNION
SELECT
*
FROM
contracts
LEFT OUTER JOIN
sessions
ON
sessions.client_id = contracts.client_id)
AS tmp_table GROUP BY client_id, contract_id
完全外部联接解决方法失败,因为各个表中的列数不同(我需要所有列,所以我在那里不走运),看起来“GROUP BY”只会返回每个表的 1 行(其中也不适用于我,因为我需要所有行。
在这种情况下,性能根本不是问题。
看起来它可以满足我的需要。在我批准答案之前,我会将其调整到我的生产表中,看看是否有我忽略的东西