我试图解决这个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)
但后来我意识到,一旦你给一个值,有NULL上boxid它的行我也会输出这些颜色,因为我的SQL查询没有考虑到彩球必须位于所有三个不同的盒子中,只是所有三个彩球都放在任何盒子里。
我难以理解如何改变我的查询,以便它只计数球是否在另一个盒子中。请帮忙。
我不认为WHERE colorid IS NOT NULL,我可以使用色彩,因为这些值是可以改变的 – user3124096
你是什么意思?查询代表某个时间点db的状态,因此它们不能“更改” – Sklivvz
我的意思是如果有人更新表格Ball以便每个球在boxid中都有一个值,那么该查询将不起作用。 – user3124096