我正在处理一个奇怪的查询,它可能需要在HAVING子句中使用过滤器,但是由于我没有在GROUP BY的HAVING子句中包含我试图过滤的列,所以它不起作用.想知道在SQL本身中是否可以用其他方式来完成这项工作?提亚
For clarification on what I'm trying to do:我需要获取table_id 和CAFICE_NUMBER,表示只提供黑咖啡,但不提供 ‘LATTE’.如果两个都被送达,那么它就不应该被退回.从… 表中位置G中的数据不应作为其唯一返回值 提供服务的拿铁位置H不应作为其服务退回 拿铁加黑咖啡.位置D应仅作为其服务退还 黑色.
我已经把所有的东西都放在SQL Fiddle here元了
在结果中,我希望不显示行
| 44444 | 12 | G |
Schema Setup:
create table some_table_test(coffee_id integer, coffee_number integer, coffee_type text);
create table some_table_test_coffee(coffee_id integer, location text);
create table some_table_number(coffee_number integer, table_id integer);
insert into some_table_test (coffee_id, coffee_number, coffee_type)
values (1, 10, 'BLACK'),
(2, 10, 'BLACK'),
(3, 11, 'BLACK'),
(6, 12, 'BLACK'),
(4, 11, 'LATTE'),
(7, 12, 'LATTE');
insert into some_table_test_coffee (coffee_id, location)
values (1, 'D'),
(3, 'H'),
(2, 'D'),
(3, 'D'),
(4, 'H'),
(7, 'G');
insert into some_table_number (coffee_number, table_id)
values (10, 123456),
(11, 98764),
(12, 44444);
Query:
select stn.table_id, st.coffee_number, location
from some_table_test st
join some_table_test_coffee s on st.coffee_id = s.coffee_id
join some_table_number stn on stn.coffee_number = st.coffee_number
group by location, st.coffee_number, stn.table_id
having count(distinct coffee_type) = 1 -- I need a way to say coffee_type != 'LATTE'
100:
| table_id | coffee_number | location |
|----------|---------------|----------|
| 123456 | 10 | D |
| 98764 | 11 | D |
| 44444 | 12 | G |