#mysql #join #group-by
#mysql #Присоединиться #группа по
Вопрос:
База данных MYSQL:
У меня есть таблица данных, которые мне нужно разделить на две таблицы.Одна таблица содержит людей и животное. Каждая запись — это человек и животное. Я подключаю это к базе данных с несколькими таблицами и хочу сгруппировать по имени persons, а затем присвоить группе идентификатор (например, идентификатор клиента), а затем в моей другой таблице передать идентификатор клиента idcustomer для объединения двух таблиц. Для упрощения я не возражаю, если эти вновь созданные идентификаторы будут в одной таблице с новыми именами столбцов. Я могу после факта экспортировать их и импортировать.
Вопрос на самом деле в том, как я могу создать группу по имени клиента, присвоить этому клиенту и идентификатор, а затем использовать тот же идентификатор в столбце для выполнения объединения.
Для описания схемы:
Я взял на себя управление проектом. База данных на данный момент представляет собой одну таблицу. В этой таблице:
persons name, address, childsname, description of child
Что бы хотелось, чтобы это было, по крайней мере, для начала, это:
id_person, person name, childsname, childparent, description of child.
Идентификатор пользователя и дочернего родителя должен совпадать. Когда я разбиваю таблицу и помещаю информацию о дочернем элементе в дочернюю таблицу, у дочернего элемента будет родительский идентификатор.
Я все еще планирую иметь две таблицы. Но я могу экспортировать и создавать таблицы, моя проблема заключается в присвоении родительского идентификатора дочернему столбцу с текущими данными.
Примером пары строк может быть:
person_name, address, childsname, description
mark twain, 23 st., Buckweat, short smart kid
mark twain, 23 st., Daniel, short kinda smart
Вместо этого я хотел бы иметь 2 таблицы, одну для родителей, а другую таблицу — для их дочерних элементов.
При настройке этой базы данных, если у одного пользователя более одного дочернего элемента, появляется другая строка, в которой перечислены все те же данные.
Что я планировал, так это иметь несколько таблиц с объединением.
Исходная база данных не имеет индекса или уникального идентификатора.
Что я хочу сделать, так это перебирать записи, поскольку уникального идентификатора нет, если имя клиента идентично, то есть они перечислены дважды, тогда у них должно быть более одного дочернего элемента.
В этом случае я хочу иметь возможность просматривать базу данных и назначать идентификатор для родителей. а также добавить другой столбец с именем parentid, который будет дочерней таблицей.
Комментарии:
1. Не могли бы вы предоставить более подробную информацию? Какова ваша фактическая табличная схема и какова желаемая схема? Какой результат вы хотите запросить? Не могли бы вы привести нам пример?
2. я попытался добавить больше деталей. спасибо за ваше время.
Ответ №1:
Чтобы создать нужную вам таблицу, вы можете использовать временную таблицу, в которую вы вставите все родительские имена и присвоите им идентификаторы. Затем вы можете обновить существующую таблицу:
CREATE TABLE name_to_id (
`id` INT(11) AUTO_INCREMENT,
`name` VARCHAR(256),
PRIMARY KEY (`id`));
INSERT INTO name_to_id (name)
SELECT DISTINCT name FROM my_table;
ALTER TABLE my_table
ADD COLUMN id INT(11) FIRST,
ADD COLUMN parent_id INT(11) AFTER childsname;
UPDATE my_table t
JOIN name_to_id n ON t.name = n.name
SET t.id = n.id, t.parent_id = n.id;
Для создания родительской и дочерней отдельных таблиц вы можете использовать:
CREATE TABLE parents AS
SELECT id, name, address FROM my_table
GROUP BY id;
CREATE TABLE children AS
SELECT childsname, parent_id, description
FROM my_table;
Возможно, вы захотите изменить эти таблицы позже, чтобы добавить первичные ключи и другие необходимые индексы.
Комментарии:
1. я прохожу через это, и я действительно ценю то, что вы здесь показали. я обязательно отвечу, как только у меня будет время предоставить более подробную информацию.