Как проверить, существует ли список идентификаторов в другом списке идентификаторов? - PullRequest
2 голосов
/ 21 марта 2019

Я хочу сделать предложение where на MySql.У меня есть столбец в БД, у которого есть список идентификаторов, разделенных запятой (2,5,6,8).И мне нужно проверить, есть ли каждый из этих идентификаторов в другом списке идентификаторов.Если бы у меня был только один идентификатор для проверки (не список), я бы знал, как поступить с предложением «where IN».Итак, как проверить, существует ли список идентификаторов в другом списке идентификаторов?

Ответы [ 2 ]

3 голосов
/ 21 марта 2019

В SQL нет такого понятия, как "список идентификаторов".У вас есть строка, которая содержит цифровые цифры и запятые.

Сохранение списка идентификаторов в виде строки - это нормально, если вам нужно использовать его только в виде строки.Но если вам нужно выполнить запросы, которые обрабатывают список как набор дискретных значений идентификаторов, вам следует нормализовать данные, сохранив один идентификатор на строку в зависимой таблице.

CREATE TABLE IdSets (
  entity_id INT NOT NULL,
  item_id INT NOT NULL,
  PRIMARY KEY (entity_id, item_id),
  FOREIGN KEY (entity_id) REFERENCES entities(entity_id)
);

Тогда вы сможете решить свою проблемус запросом JOIN.

SELECT i.entity_id
FROM IdSets AS i LEFT OUTER JOIN TestSets AS t USING (item_id)
GROUP BY entity_id
HAVING COUNT(i.item_id) = COUNT(t.item_id)
0 голосов
/ 21 марта 2019

Спасибо за все советы, я подумал, что это готовая функция для этого.Я новичок в SQL.Но поскольку невозможно сделать тест списка напрямую, я буду использовать другую таблицу, в которой оба идентификатора хранятся отдельно для проведения теста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...