mysql - 如何制作一个 SQL 来创建一个报告,该报告选择所有带有 certian 行项目的报价,并包括另一个项目(如果它在该报价上)?

标签 mysql sql database report

我有两个表:quote 和 item。

报价表

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 连接到同一报价”的条件。

最佳答案

您可以使用子查询,如果您使用的是 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 Fiddle

关于mysql - 如何制作一个 SQL 来创建一个报告,该报告选择所有带有 certian 行项目的报价,并包括另一个项目(如果它在该报价上)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50768378/

相关文章:

sql - 如何找出 Redshift 表中每列的大小?

mysql - 具有 3 种用户的数据库模型

mysql - 4维数据库网格

MySQL - 字符串后缀索引

mysql - MYSQL中按类别分组的每个财政年度的期初和期末余额之和

database - NoSQL到底是什么?

database - Umbraco 4.0 安装 "database initialization failed"

php - php 中 for 和 SQL update 的正确语法是什么?

php - 从 MySQL 数据库导出数据到 PHP 中的 excel

c# - SQLBulkCopy 抛出 InvalidOperationException 可空整数