用于选择仅包含给定颜色的书籍的库架的SQL命令

时间:2012-03-06 17:42:13

标签: mysql sql

我们有一个库(表库)。在那个图书馆里有很多架子(柱架)。在这些货架上可以是不同颜色的书(列颜色)。

任务:返回仅保留红皮书的书架数量。

INSERT INTO `test` (`id`, `shelf`, `color`) VALUES (1, '2', 'red');
INSERT INTO `test` (`id`, `shelf`, `color`) VALUES (2, '2', 'white');
INSERT INTO `test` (`id`, `shelf`, `color`) VALUES (3, '3', 'red');
INSERT INTO `test` (`id`, `shelf`, `color`) VALUES (4, '4', 'red');
INSERT INTO `test` (`id`, `shelf`, `color`) VALUES (5, '4', 'red');
INSERT INTO `test` (`id`, `shelf`, `color`) VALUES (6, '2', 'blue');
INSERT INTO `test` (`id`, `shelf`, `color`) VALUES (7, '4', 'red');
INSERT INTO `test` (`id`, `shelf`, `color`) VALUES (8, '3', 'green');
INSERT INTO `test` (`id`, `shelf`, `color`) VALUES (9, '1', 'blue');
INSERT INTO `test` (`id`, `shelf`, `color`) VALUES (10, '1', 'blue');
INSERT INTO `test` (`id`, `shelf`, `color`) VALUES (11, '5', 'green');
INSERT INTO `test` (`id`, `shelf`, `color`) VALUES (12, '5', 'black');
INSERT INTO `test` (`id`, `shelf`, `color`) VALUES (13, '6', 'red');
INSERT INTO `test` (`id`, `shelf`, `color`) VALUES (14, '6', 'red');
INSERT INTO `test` (`id`, `shelf`, `color`) VALUES (15, '6', 'white');

在上述情况下,它应仅返回4号货架。

4 个答案:

答案 0 :(得分:4)

尝试此查询 -

SELECT shelf FROM test
GROUP BY shelf
HAVING COUNT(IF(color = 'red', 1, NULL)) = COUNT(*)

答案 1 :(得分:1)

这个会起作用:

select count(*) from (select distinct shelf from test where color='red') f;

内部查询(从test中选择不同的货架,其中color ='red')将返回包含红色书籍的不同货架编号:

2
3
4
6

然后我们搜索那些货架的数量(4)

答案 2 :(得分:0)

只有红色货架

INSERT INTO test (id, shelf, color) VALUES (1, '2', 'red'); 
INSERT INTO test (id, shelf, color) VALUES (2, '2', 'white'); 
INSERT INTO test (id, shelf, color) VALUES (3, '3', 'red'); 
INSERT INTO test (id, shelf, color) VALUES (4, '4', 'red'); 
INSERT INTO test (id, shelf, color) VALUES (5, '4', 'red'); 
INSERT INTO test (id, shelf, color) VALUES (6, '2', 'blue'); 
INSERT INTO test (id, shelf, color) VALUES (7, '4', 'red'); 
INSERT INTO test (id, shelf, color) VALUES (8, '3', 'green'); 
INSERT INTO test (id, shelf, color) VALUES (9, '1', 'blue'); 
INSERT INTO test (id, shelf, color) VALUES (10, '1', 'blue'); 
INSERT INTO test (id, shelf, color) VALUES (11, '5', 'green'); 
INSERT INTO test (id, shelf, color) VALUES (12, '5', 'black'); 
INSERT INTO test (id, shelf, color) VALUES (13, '6', 'red'); 
INSERT INTO test (id, shelf, color) VALUES (14, '6', 'red'); 
INSERT INTO test (id, shelf, color) VALUES (15, '6', 'white');

SELECT shelf 
FROM test 
WHERE color = 'red'
-- Uncomment the group by if you want a grouped result set    
--GROUP BY shelf;

SELECT shelf, count(shelf)
FROM test 
WHERE color = 'red'
GROUP BY shelf;

SELECT count(shelf)
FROM test 
WHERE color = 'red'

答案 3 :(得分:0)

抱歉,起初没有得到你想要的东西。这会更好。

select distinct t1.shelf from  test t1 
where t1.color='red' and not 
  exists (select shelf from test where shelf=t1.shelf and color != 'red')

我们搜索上面有红色书籍且没有红色书籍的书架(存在子查询)