Обеспечивает вывод:

table 1
item    group_id
123     aaaa
432     bbbb
534     aaaa
765     cccc
656     aaaa
656     cccc
111     cccc

group_id    group_name
aaaa        groupA
bbbb        groupB
cccc        groupC

у найти все группы, которые содержат как 765, так и 656 - в этом случае GroupC содержит оба этих значения.

Есть ли способ избежать множества вложенных запросов или операторов AND? Скажем, если в таблице 1 могут быть тысячи пар, и мне нужно найти группы, которые содержат весь список из 30 элементов, было бы некрасиво написать действительно большой запрос, чтобы ответить на вопрос.

Хотел бы я сказать «где в (765,656)», но пусть он ведет себя по-другому. Если бы было несколько предметов, которые можно было бы сопоставить, это было бы грязно.

SQL Fiddlehttp://sqlfiddle.com/#!9/6581eb/9

Пример данных (в случае, если SQL Fiddle по какой-то причине недоступен):

create table table1(itemID int,groupID varchar(4));
insert into table1(itemID,groupID)
values
  (123,'aaaa')
  ,(432,'bbbb')
  ,(534,'aaaa')
  ,(765,'cccc')
  ,(656,'aaaa')
  ,(656,'cccc')
  ,(111,'cccc');

create table table2(groupID varchar(4),groupName varchar(6));
insert into table2(groupID,groupName)
values
  ('aaaa','groupA')
  ,('bbbb','groupB')
  ,('cccc','groupC');

Ответы на вопрос(3)

Ваш ответ на вопрос