我只想检索那些匹配$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
你可以用它 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'))
1条答案
按热度按时间acruukt91#
你可以用它
GROUP BY
以及基于条件聚集的过滤Having
.SUM( code IN (values) )
将为返回正值e_id
其中代码至少在其中一个值中。所以,在这个条件下,对于一个特定的e_id
.SUM( code NOT IN (values) )
将为返回正值e_id
如果至少有一行code
规定值以外的值。所以,我们需要确保这是零,因此我们使用NOT
接线员。db小提琴演示
案例1-仅限('a'):
案例2-仅在('a','b'):
案例3-仅('a','b','c'):