이 SQL 문제를 해결하기 위해 노력하고 있습니다. 색깔이 다른 공과 상자가 몇 개 있습니다. 이제는 모든 상자에있는 볼의 색상을 출력하는 SQL 쿼리를 작성하려고합니다. 그래서 상자 A, B, C에 녹색 공이 있지만 파란색과 빨간색 공이 3 개 중 1 ~ 2 개 밖에 없으면 녹색으로 출력해야합니다.SQL : 모든 상자에 들어있는 공의 색상/색상 만 출력합니다.
나는 세 개의 테이블이 있습니다
상자가 상자의 내부 아니에요 의미
ID |
====|
A |
B |
C |
볼
Number | boxid | colorid |
=======|=======|=========|
1 |A | Green |
2 |A | Red |
3 |A | Blue |
4 |B | Green |
5 |B | Red |
6 |NULL | Blue |
7 |C | Green |
8 |NULL | Red |
9 |NULL | Blue |
10 |NULL | Green |
11 |NULL | Red |
12 |NULL | Blue |
NULL을
색상
Name |
======|
Blue |
Red |
Green |
지금, 처음에 나는이 코드를 사용하여이 문제를 해결 수 있다고 생각 :
SELECT colorid
FROM Ball
GROUP BY colorid
HAVING COUNT(colorid) = (SELECT COUNT(*) FROM Box)
OR COUNT(colorid) > (SELECT COUNT(*) FROM Box)
을하지만 그때 나는 깨달았다 당신은 boxid에 NULL이 행에 값을 제공하면 내 SQL 쿼리는 컬러 볼이 세 개의 다른 상자에 있어야한다는 것을 고려하지 않기 때문에 이러한 색상을 출력 할 것입니다. 세 개의 컬러 볼은 모두 상자에 있습니다.
내 쿼리를 변경하는 방법에 문제가있어 공이 다른 상자와 다른 상자에있는 경우에만 계산됩니다. 도와주세요.
3 개 상자에있는 색상을 찾기 위해, 당신이 무슨 뜻 이죠 값이 – user3124096
변경 될 수 있기 때문에 ? 쿼리는 특정 시점에서 DB의 상태를 나타냅니다. 따라서 "변경"할 수 없습니다. – Sklivvz
누군가가 테이블 공을 업데이트하면 모든 공이 boxid에 값을 가지므로 그 쿼리가 작동하지 않습니다. . – user3124096