Похоже, что это обычная задача с простым решением, но я пришел с пустыми руками и в StackOverflow, и в Google.
Сценарий таков: у меня есть две таблицы A и B, которые разделяютотношения многие ко многим.Таким образом, у меня есть таблица A_B с внешними ключами, которая отображает отношения записи A-B.Стандартные вещи.
Все, что я пытаюсь выяснить, это как сделать запрос к таблицам, прежде чем я введу новую запись (одну запись «A» с одной или несколькими записями «B»), если совпадающие, идентичные отношенияуже существует.Цель состоит в том, чтобы не дублировать данные.
Наконец, эти таблицы вырастут довольно большими, поэтому мне нужно держать накладные расходы там, где это возможно.
ОБНОВЛЕНИЕ
Ниже приведен пример запроса, который я пытался определить, существует ли существующая запись A, сопоставленная со значениями B_id 3, 4 и 5. Он работает, однако возвращает ложные срабатывания, если есть два различных значения A_id, которые охватывают3, 4 и 5, например:
- A_id = 1, значения B_id = 2, 3
- A_id = 2, значения B_id = 4, 5, 6
SELECT A_id, B_id
FROM A_B
GROUP BY
A_id HAVING
B_id IN (3,4,5)
AND
COUNT(*) = 3
LIMIT 1
ОБНОВЛЕНИЕ 2
Первичный ключ таблицы A_B - это составной ключ, включающий A_id и B_id .
A_BТаблица определяет уникальный составной ключ, включающий A_id и B_id.
Один A состоит из одного или нескольких Bs.
Более общий способ сформулировать этот вопрос: заданный конечный набор идентификаторов B idзначения, я должен быть в состоянии определить, существует ли A, состоящий из этого точного набора Bs.Если нет, то создается новый A с этим набором Bs.
Cheers