我需要获取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);
答案 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);