Mysql INNER JOIN 和 HAVING COUNT

标签 mysql

嘿 MYSQL 问题在这里:

我有 3 个表,我们称它们为 items、article 和 order_point,看起来像这样(简化形式):

item = |item_id|article_id|,   
article = |article_id|article_info|,  
order_point=|op_id|article_id|op_amount|

项目表包含存储中的物理项目(每个物理项目一行)。元素表包含有关每种类型的物理元素的信息,而 order_point(数量)则指定了每件元素应始终保存在商店中的数量。

现在我想做的是获取商店中商品数量少于 order_point_amount 的每个article_id。

所以我想要的是这样的:

SELECT article_id 
FROM item INNER JOIN order_point 
ON (item.article_id = order_point.article_id GROUP BY item.article_id 
HAVING COUNT(item)<order_point.op_amount)

上面的代码无效,而且现在是工作日的最后几分钟,所以让我们看看是否有人在我明天之前解决它!

编辑:查询中的问题是,在having子句中 order_point.op_amount 是未知的。

最佳答案

假设您要加入没有重复项的列(这是一种非常常见的情况):

A 和 B 的内连接给出 A 与 B 相交的结果,即维恩图交集的内部部分。

A 和 B 的外连接给出 A 并 B 的结果,即维恩图并的外部部分。

示例

假设您有两个表,每个表有一列,数据如下:

A    B
-    -
1    3
2    4
3    5
4    6

请注意,(1,2) 是 A 所独有的,(3,4) 是通用的,(5,6) 是 B 所独有的。

内连接

使用任一等效查询的内部联接给出两个表的交集,即它们共有的两行。

select * from a INNER JOIN b on a.a = b.b;
select a.*,b.*  from a,b where a.a = b.b;

a | b
--+--
3 | 3
4 | 4

左外连接

左外连接将给出 A 中的所有行以及 B 中的所有公共(public)行。

select * from a LEFT OUTER JOIN b on a.a = b.b;
select a.*,b.*  from a,b where a.a = b.b(+);

a |  b  
--+-----
1 | null
2 | null
3 |    3
4 |    4

完全外连接

完全外连接将为您提供 A 和 B 的并集,即 A 中的所有行和 B 中的所有行。如果 A 中的某些内容在 B 中没有对应的数据,则 B 部分为空,反之亦然。

select * from a FULL OUTER JOIN b on a.a = b.b;

 a   |  b  
-----+-----
   1 | null
   2 | null
   3 |    3
   4 |    4
null |    6
null |    5

希望这能解决您的问题!祝你有美好的一天!

关于Mysql INNER JOIN 和 HAVING COUNT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27152793/

相关文章:

python - 从MySQL数据库中检索数据,在python中以字典格式

mysql - 如何对包含数字和字母的字符串进行排序?

java - DriverManager.getConnection 无法解析为类型

c# - 如何增加来自 c# 应用程序的 mysql 连接的连接超时?

mysql - linux下mysql数据自动备份

mysql - 按 View 限制排序,然后按另一列排序

java - Hibernate 在 MySQL 中的 "nullable = false"上出现问题

php - 使用不同的参数重复mysql查询php

mysql 大小写函数

mysql 参数添加不评估