嘿 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/