我試圖解決這個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