如何比较两组

时间:2019-09-09 18:23:29

标签: mysql sql

我需要获取aid!= 40和cid = 39(多对多连接)的所有cid

我已经准备了两个查询,但我不知道该如何排在第二位

SELECT DISTINCT aid FROM ac_branch WHERE aid IN (SELECT aid FROM ac_branch WHERE cid = 39);

SELECT DISTINCT aid FROM ac_branch WHERE aid IN (SELECT aid FROM ac_branch WHERE cid != 40);

enter image description here

4 个答案:

答案 0 :(得分:1)

看起来您实际上很接近,这是您要找的吗?

SELECT DISTINCT aid 
FROM ac_branch 
WHERE cid = 39 
   AND aid NOT IN (SELECT aid FROM ac_branch WHERE cid = 40)
;

或者,您也可以像这样子查询而无需这样做:

SELECT aid 
FROM ac_branch
WHERE cid IN (39, 40)
GROUP BY aid
HAVING SUM(CASE WHEN cid=39 THEN 1 ELSE -1 END) = 1
;

但是,这假定对于给定的援助值,只能有39和40的单个条目。例如,如果有两个条目的aid = 1和cid = 39,而没有一个条目的cid = 4,则aid = 1不会出现(因为总和为2)。同样,结果中也将包含两个39和40的辅助物。


第三个选项涉及加入

SELECT DISTINCT acb39.aid
FROM ac_branch AS acb39
LEFT JOIN ac_branch AS acb40
   ON acb39.aid = acb40.aid AND acb40.cid = 40
WHERE acb1.cid = 39
   AND acb40.aid IS NULL
;

答案 1 :(得分:1)

一种使用聚合的简单方法:

ffmpeg -y -re -rtbufsize 500M -video_size 1920x1080 -framerate 29.97 -f dshow -i video="@device_pnp_\\?\pci#ven_1a0a&dev_6202&subsys_620f1461&rev_01#4&3227f04d&0&00d8#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\{ede957b0-eaa5-4bf4-acf3-6e10cb4836c3}":audio="@device_pnp_\\?\pci#ven_1a0a&dev_6202&subsys_620f1461&rev_01#4&3227f04d&0&00d8#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\{ca465100-deb0-4d59-818f-8c477184adf6}" -c:v h264 -c:a aac -f mpegts test.ts

因为必须匹配一行并且SELECT aid FROM ac_branch WHERE cid IN (39, 40) -- consider both GROUP BY aid HAVING SUM(cid = 39) > 0 AND -- has 39 SUM(cid = 40) = 0; -- does not have 39 没有一行,所以第一个条件是多余的,但是为了清楚起见,我还是将其保留在原处。

答案 2 :(得分:1)

您也可以这样做

SELECT aid
FROM ac_branch 
WHERE cid IN (39, 40)
GROUP BY aid
HAVING AVG(cid<>40) = 1;

答案 3 :(得分:0)

将两个查询合并到一个查询中。你会得到结果的。

 SELECT DISTINCT aid FROM ac_branch WHERE aid IN (SELECT aid FROM ac_branch WHERE cid = 39 and cid!=40);