Удалить дубликаты из основной таблицы, но также и таблицу отношений? - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть две таблицы questions и choices, choices имеет отношение к questions со столбцом с именем question_id.И это также имеет внешнее ограничение на таблицу вопросов и каскад на удаление.

Но мне удается получить дубликаты в БД.И это было бы довольно просто удалить, но я также должен проверить таблицу choices. И проверить, чтобы они также были дубликатами ...

В таблице questions, соответствующей содержимому в столбцеdescription и image будут дублированы, и в таблице choices, столбец choice для этого конкретного вопроса, если это имеет смысл.

Итак, к чему все сводится, так это кchoices таблица, я думаю.(извините, действительно не понимаю, как у меня возникла эта проблема при запуске ?).

Поскольку столбец questions description ', может совпадать с .Но относитесь к изображению и ответам в зависимости от того, что изображение показывает.И иногда есть дублирующее изображение с описанием, изображение всего, но выбор в другом «порядке».

Трудно объяснить.Но интересными полями являются description, source и imagechoice в choices таблице, но тогда они могут быть в другом порядке.

Я выполнил SQLfiddle с данными, которые я считаю актуальными.

CREATE TABLE IF NOT EXISTS `questions` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `order` int(11) NOT NULL DEFAULT 1,
  `description` text DEFAULT NULL,
  `source` text DEFAULT NULL,
  `image` text DEFAULT NULL,
  PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `choices` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `question_id` int(10) unsigned NOT NULL,
  `choice` text DEFAULT NULL,
  `correct` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `choices_question_id_foreign` (`question_id`),
  CONSTRAINT `choices_question_id_foreign` FOREIGN KEY (`question_id`) REFERENCES `questions` (`id`) ON DELETE CASCADE
) DEFAULT CHARSET=utf8;

INSERT INTO `questions` (`order`, `description`, `source`, `image`) VALUES
  ('1', 'Is the earth is flat?', null, 'eerrff.png'), #ID 1 (NOT DUPLICATE, NO SOURCE?)
  ('1', 'Is the earth is flat?', 'In a very special community, it is', 'eerrff.png'), #ID 2 (DUPLICATES)
  ('1', 'Is the earth is flat?', 'In a very special community, it is', 'eerrff.png'), #ID 3 (DUPLICATES)
  ('1', 'Is the earth is flat?', 'In a very special community, it is', 'eerrff.png'), #ID 4 (DUPLICATES)
  ('1', 'Is the earth is flat?', 'In a very special community, it is', 'eerrff.png'), #ID 5 (DUPLICATES)
  ('1', 'Is the earth is flat?', 'In a very special community, it is', 'eerrff.png'), #ID 6 (DUPLICATES)
  ('1', 'Is the earth is flat?', 'In a very special community, it is', 'eerrff.png'), #ID 7 (DUPLICATES)
  ('1', 'Is the earth is flat?', 'In a very special community, it is', 'eerrff.png'), #ID 8 (DUPLICATES)
  ('1', 'Is the earth is flat?', 'In a very special community, it is', 'eerrff.png'), #ID 9 (DUPLICATES)
  ('1', 'Look at the image, what is correct?', 'source', 'oopp.png'), #ID 10 (DUPLICATE WITH #12)
  ('1', 'Look at the image, what is correct?', 'source', 'qqww.png'), #ID 11 (NOT DUPLICATE, LOOK CHOICES)
  ('1', 'Look at the image, what is correct?', 'source', 'oopp.png'), #ID 12 (DUPLICATE WITH #10)
  ('1', 'Look at the image, what is correct?', 'source', 'oopp.png'); #ID 13 (NOT DUPLICATE, LOOK CHOICES)

INSERT INTO `choices` (`question_id`, `choice`, `correct`) VALUES
  ('1', 'Yes', 1),
  ('1', 'No', 0),
  ('2', 'Yes', 1),
  ('2', 'No', 0),
  ('3', 'No', 0),
  ('3', 'Yes', 1),
  ('4', 'Yes', 1),
  ('4', 'No', 0),
  ('5', 'No', 0),
  ('5', 'Yes', 1),
  ('6', 'Yes', 1),
  ('6', 'No', 0),
  ('7', 'Yes', 1),
  ('7', 'No', 0),
  ('8', 'No', 0),
  ('8', 'Yes', 1),
  ('9', 'Yes', 1),
  ('9', 'No', 0),
  ('10', 'First is corrct', 1),
  ('10', 'second', 0),
  ('10', 'third', 0),
  ('10', 'fourth', 0),
  ('11', 'b', 0),
  ('11', 'c', 0),
  ('11', 'Number A', 1),
  ('11', 'd', 0),
  ('12', 'third', 0),
  ('12', 'second', 0),
  ('12', 'First is corrct', 1),
  ('12', 'fourth', 0),
  ('13', 'That guy on the left is doin it wrong', 0),
  ('13', 'That guy on the right is doin it wrong', 0),
  ('13', 'That guy in yellow is doin in right', 1),
  ('13', 'That guy green is doin it right', 0);

Ожидаемый результат: Удалите дубликаты из таблицы questions, в зависимости от того, какой результат строк отличается от choices.

.

1 Ответ

0 голосов
/ 16 декабря 2018

Ниже приведен список всех question_id с одинаковым выбором разных вопросов:

select distinct c1.* from choices c1 join choices c2 
on c1.question_id != c2.question_id 
and c1.choice = c2.choice 
order by choice
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...