【发布时间】:2014-02-01 05:18:14
【问题描述】:
这是一个时髦的问题,我知道这一点。也许这都是因为我真的很累。
现在,不要责怪设计 - 它有缺陷,但我无能为力,好吗?
- 两个表,由一个 id 字段链接。
- 第一个表包含仓库中的职位(表 P)
- 第二个表包含存储在仓库中每个位置的物品(表 PA)
- 所有 仓库中的位置都存在于 P 表中(> 5000 条记录)
- 每个位置可以包含不止一篇文章
- PA 表中不存在 P 表中的位置
positionarticles 的计数加上 positionarticles 中不的位置。
真的没有比这种完全愚蠢更好的方法了吗?:
SELECT SUM(row)
FROM
(
SELECT COUNT(*) row
FROM PA
UNION
SELECT COUNT(*)
FROM P
WHERE ID NOT IN
(
SELECT P_ID
FROM PA
)
) as rowcounter
样本数据
表 P:
ID Name
1 A01
2 A03
3 B01 *
4 B02 *
表 PA:
ID P_ID A_ID
1 1 201 *
2 1 202 *
3 1 203 *
4 2 205 *
返回的计数是 6 => 来自 PA 的 4 行 + 2 行(PA 中不存在 P_ID)。计数的行带有星号 (*)。
【问题讨论】:
-
你能用样本数据和预期结果澄清你的问题吗?你说“我想计算所有职位和职位文章”。我希望您的查询会返回两个计数。
-
澄清了我的问题,添加了示例数据和预期结果。这个问题仍然有点模糊,但应该从样本数据的模糊中清楚。谢谢。
-
草莓:这不太礼貌。我已经尝试了数十亿(不完全是,但你知道,很多)版本的 JOIN,唯一正确的结果是 q 中那个丑陋的东西。我很想用正常的 LEFT 或 FULL 或 INNER 或 CROSS 来完成这项工作,但我失败了,因此我在这里发帖。
-
我改变了我的方法,和以前一样多次;不是解决问题而是规避问题。
标签: mysql sql select count group-by