есть ли способ исключить все кортежи в 'A', которые не имеют 'a' общего с 'B'?
Это двойной минус: "exclude... не ... ".Давайте превратим его в положительное:
"Показать все кортежи в A
, которые do имеют a
общего с B
."
То естьВы хотите подмножество кортежей.Здесь важно, чтобы a
было единственным именем атрибута, общим для двух отношений.Затем мы начнем с Natural Join .
A ⋈ B
Это даст результат со всеми атрибутами {a, b, c, d, e}
.Еще не то, что вы хотите, так что вы на правильном пути с проекцией.Я буду использовать оригинальный оператор Кодда (π
).Есть два пути;они эквивалентны:
A ⋈ (π{a}( B )) // take just {a} from B
π{a, b, c}( A ⋈ B ) // take {a, b, c} from the result of Join
Это обычно необходимая операция, поэтому есть также сокращение среди «расширенного» набора операторов, чтобы избежать этой проекции, называемой (слева) SemiJoin
A ⋉ B
Также называется «Соответствие».