Ger*_*eal 2 sql sql-server comparison
我有一张颜色的桌子:
COLORS
idColor Name
------- ------
4 Yellow
5 Green
6 Red
Run Code Online (Sandbox Code Playgroud)
我有另一个数据表:
PRODUCTS
idProduct idCategory idColor
--------- ---------- -------
1 1 4
2 1 5
3 1 6
4 2 10
5 2 11
6 2 12
7 3 4
8 3 5
9 3 8
10 4 4
11 4 5
12 4 6
13 5 4
14 6 4
15 6 5
Run Code Online (Sandbox Code Playgroud)
我只想要从表(4,5,6)中的值出现在第二个表中Products时返回行,并且正好具有3个具有相同值的元素.idColorColorsIdCategoryidColor4, 5, 6
对于此示例,查询应返回:
IdCategory
----------
1
4
Run Code Online (Sandbox Code Playgroud)
试试这个:
SELECT idCategory
FROM PRODUCTS
GROUP BY idCategory
HAVING COUNT(*) = 3
AND COUNT(DISTINCT CASE WHEN idColor IN (4,5,6) THEN idColor END) = 3
Run Code Online (Sandbox Code Playgroud)
更新
如果要根据表"COLOR"的值动态过滤结果
SELECT idCategory
FROM PRODUCTS P
LEFT JOIN (SELECT idColor, COUNT(*) OVER() TotalColors
FROM COLORS) C
ON P.idColor = C.idColor
GROUP BY idCategory
HAVING COUNT(*) = MIN(C.TotalColors)
AND COUNT(DISTINCT C.idColor) = MIN(C.TotalColors)
Run Code Online (Sandbox Code Playgroud)
这是一个小例子.
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |