首页 > 解决方案 > 如何制作一个 SQL 来创建一个报告,该报告选择具有特定行项目的所有报价,并在该报价上包含另一个项目?

问题描述

我有两个表:报价和项目。

报价表

id | quote_number
---+-------
 1 |   100 
 2 |   200 

项目表

id | model | quote_id | other_data 
---+-------+----------+-----------
 1 |   ABC | 1        | xxx
 2 |  DISC | 1        | xxx
 3 |   ABC | 2        | xxx
 4 |  DISC | 2        | xxx
 3 |   XXX | 3        | xxx
 4 |  DISC | 3        | xxx
 3 |   ABC | 4        | xxx

我需要创建一个报告,在其中选择必须包含模型的所有报价,ABC如果它们包含,我还希望列出DISC属于该报价的模型。我想列出所有此类项目行。如何?

用简单的英语来说,就是“给我所有带有 ABC 模型的报价,这些报价可能也有与之相关的折扣 (DISC)”。

示例报告

quote_id | model | other_data 
---------+-------+---------+-
 1       |   ABC | xxx
 1       |  DISC | xxx
 2       |   ABC | xxx
 2       |  DISC | xxx

到目前为止,我只能弄清楚如何ABC在其中拉线,但我不知道如何在其中拉线DISC,其条件是“必须将 ABC 连接到同一个引号”。

标签: mysqlsqldatabasereport

解决方案


您可以使用子查询,如果您使用 MySQL 8.0,也可以使用 CTE

SELECT it.quote_id, it.model, it.other_data
FROM item it INNER JOIN (
    SELECT quote_id 
    FROM item i WHERE model = 'ABC') as sub_it 
ON it.quote_id=sub_it.quote_id 
WHERE it.model='ABC' OR it.model='DISC'
ORDER BY it.quote_id DESC; 

DB小提琴


推荐阅读