MySQL查询获取未多次分配的值

时间:2016-12-21 03:06:35

标签: mysql

所以我有一张由campaign_idpost_id组成的表格。 campaign_id可以有多个post_id。 但post_id只能分配给一个 campaign_id

例如: 这是有效的

campaign_id | post_id
100           1
100           2
100           3

这是无效的

campaign_id | post_id
100           1
100           2
100           3
101           1 <-- `post_id` assigned to 2 `campaign_id`

我正在尝试编写一个查询,该查询将返回按post_id分配的广告系列数量,因此我可以进行一些完整性检查,但无法弄清楚如何。

我现在拥有的东西:

select distinct campaign_id, post_id from table
where post_id is not null;

2 个答案:

答案 0 :(得分:1)

像这样,使用GROUP BY和COUNT聚合:

SELECT t.post_id
     , COUNT(DISTINCT t.campaign_id)
  FROM mytable t
 GROUP BY t.post_id
HAVING COUNT(DISTINCT t.campaign_id) > 1
 ORDER BY t.post_id

注意:

如果您想要返回HAVING的所有值,包括仅与post_id相关联的值,则可以省略campaign_id子句。

DISTINCT关键字也可以省略。如果给定campaign_id的{​​{1}}重复值,则会产生影响。例如,使用以下行:

post_id

您是否希望将计数返回为1或3.

答案 1 :(得分:0)

如何使用COUNT

SELECT COUNT(campaign_id)
 FROM table
 GROUP BY post_id
 WHERE post_id IS NOT NULL