在MySQL中使用内部连接可能吗?

在MySQL中使用内部连接可能吗?,mysql,sql,join,Mysql,Sql,Join,我一直在尝试构建一个查询,仅当同一订单参考下的文件的所有打印项目数量值都等于5时,才会从下面的数据示例中包含给定的订单参考封面文件 这是使用联接实现的,还是超出了单个查询的权限 我已尝试构建内部联接,但无法确定如何限制结果,以便仅当订单的所有组成部分在“打印项目数量”列中的值相等时,才能获得封面行 以下是基本选择查询和示例数据: SELECT c1.`order_id`,c1.name1,c1.name2,c1.`print_item_qty`,c1.`sub_item_type`, c1.`o

我一直在尝试构建一个查询,仅当同一订单参考下的文件的所有打印项目数量值都等于5时,才会从下面的数据示例中包含给定的订单参考封面文件

这是使用联接实现的,还是超出了单个查询的权限

我已尝试构建内部联接,但无法确定如何限制结果,以便仅当订单的所有组成部分在“打印项目数量”列中的值相等时,才能获得封面行

以下是基本选择查询和示例数据:

SELECT c1.`order_id`,c1.name1,c1.name2,c1.`print_item_qty`,c1.`sub_item_type`,
c1.`order_reference` FROM print_items;


+--------------+-------+---------+----------------+---------------+-----------------+
| order_id     | name1 | name2   | print_item_qty | sub_item_type | order_reference |
+--------------+-------+---------+----------------+---------------+-----------------+
| 000003201875 | Jason | Bramley | 5              | cover         | 1875            |
| 000003201875 | Jason | Bramley | 5              | inner         | 1875            |
| 000003201875 | Jason | Bramley | 1              | card          | 1875            |
| 000003201876 | Jason | Bramley | 5              | cover         | 1876            |
| 000003201876 | Jason | Bramley | 5              | inner         | 1876            |
+--------------+-------+---------+----------------+---------------+-----------------+
我对上述样本数据的期望结果仅为以下行:

+--------------+-------+---------+----------------+---------------+-----------------+
| order_id     | name1 | name2   | print_item_qty | sub_item_type | order_reference |
+--------------+-------+---------+----------------+---------------+-----------------+
| 000003201876 | Jason | Bramley | 5              | cover         | 1876            |
 +--------------+-------+---------+----------------+---------------+-----------------+
如果有人能给我指明正确的方向,我将不胜感激


非常感谢。

因此,您希望验证是否仅为该订单参考中的所有子项目类型选择“打印项目数量”为5的订单的数据

为此,请使用如下子查询

SELECT order_reference, 
MAX(print_item_qty), 
MIN(print_item_qty) 
FROM print_items
GROUP BY order_reference 
HAVING MAX(print_item_qty) = 5
AND MIN(print_item_qty) = 5
并加入原始数据集。子查询将限制到您想要的ID,并且返回将返回与订单引用关联的所有行,对于每个子项目类型,打印项目数量=5,例如

SELECT c1.`order_id`,
c1.name1,
c1.name2,
c1.`print_item_qty`,
c1.`sub_item_type`,
c1.`order_reference` 
FROM print_items AS c1
INNER JOIN (SELECT order_reference, MAX(print_item_qty), MIN(print_item_qty) FROM print_items
GROUP BY order_reference HAVING MAX(print_item_qty) = 5 AND MIN(print_item_qty) = 5) AS b
ON c1.order_reference = b.order_reference 

请编辑您的问题并显示您想要的结果。(而且,格式化查询也是一个好主意。)“封面行”是什么?我会检查
计数(不同打印项目数量)
是否为1,以检查所有值是否相同。然后,您可以使用
MIN(打印项目数量)
(或MAX)检查它是否为所需的值。嗨,Evan。谢谢!我从来没有想过使用MIN和MAX来限定连接中所需的记录与不同的子查询。这很好,通过在查询中添加“WHERE c1.
sub_item_type
='cover'”,我得到了我想要的东西。