mysql in($list)匹配仅当出现在list中而不是其他地方时

pieyvz9o  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(256)

给定tbl.员工的e\ U id,代码:

e_id code
1    A
1    B
3    A
4    C

我只想检索那些匹配$list中任何代码的员工,只要他们不匹配$list之外的代码。
将“onlyin”用作解决方案的伪值:
onlyin('a')应该返回e\u id 3,因为e\u id 1还有一个代码b。
onlyin('a','b')应返回e\u id 3&1(3个匹配项(至少b)
onlyin('a'、'b'、'c')应返回e\u id 1、3和4

acruukt9

acruukt91#

你可以用它 GROUP BY 以及基于条件聚集的过滤 Having . SUM( code IN (values) ) 将为返回正值 e_id 其中代码至少在其中一个值中。所以,在这个条件下,对于一个特定的 e_id . SUM( code NOT IN (values) ) 将为返回正值 e_id 如果至少有一行 code 规定值以外的值。所以,我们需要确保这是零,因此我们使用 NOT 接线员。

db小提琴演示

案例1-仅限('a'):

SELECT 
 e_id 
FROM your_table_name 
GROUP BY e_id 
HAVING SUM(code IN ('A')) AND 
   NOT SUM(code NOT IN ('A'))

案例2-仅在('a','b'):

SELECT 
 e_id 
FROM your_table_name 
GROUP BY e_id 
HAVING SUM(code IN ('A','B')) AND 
   NOT SUM(code NOT IN ('A','B'))

案例3-仅('a','b','c'):

SELECT 
 e_id 
FROM your_table_name 
GROUP BY e_id 
HAVING SUM(code IN ('A','B','C')) AND 
   NOT SUM(code NOT IN ('A','B','C'))

相关问题