Можно ли привязать несколько id к именам в sql?

В языке SQL и в MySQL в частности, нет прямого способа привязать несколько id к одному имени в одной таблице. Однако, существует несколько путей решения данной задачи, они зависят от контекста и требований.

1. Добавление дополнительной таблицы:
- Создайте отдельную таблицу с двумя столбцами: имя и id;
- Каждая запись будет содержать имя и соответствующий ему id;
- Для каждого имени можно задать несколько id.

Пример кода для создания и заполнения такой таблицы:

CREATE TABLE names (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL
);

CREATE TABLE names_ids (
    name_id INT PRIMARY KEY,
    id INT,
    FOREIGN KEY (name_id) REFERENCES names(id)
);

INSERT INTO names (name) VALUES
('Имя1'),
('Имя2'),
('Имя3');

INSERT INTO names_ids (name_id, id) VALUES
(1, 101),
(1, 102),
(2, 201),
(3, 301),
(3, 302);

Теперь для каждого имени можно хранить несколько id:

SELECT name, id
FROM names
JOIN names_ids ON names.id = names_ids.name_id;

2. Использование JSON-поля:
- В MySQL 5.7 и выше можно использовать JSON поле для хранения нескольких значений id в одном столбце;
- Запишите все id в формате JSON и сохраните их в одном поле.

Пример кода для создания таблицы с JSON-полем:

CREATE TABLE names (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    ids JSON
);

INSERT INTO names (name, ids) VALUES
('Имя1', '[101, 102]'),
('Имя2', '[201]'),
('Имя3', '[301, 302]');

Теперь можно получить список id для каждого имени:

SELECT name, JSON_EXTRACT(ids, '$[*]') AS ids
FROM names;

3. Использование разделительных строк:
- В этом случае вы можете сохранить несколько id в одной строке, разделяя их каким-либо символом;
- При запросе вы сможете разделить строку и получить отдельные значения id.

Пример кода для создания таблицы с разделительными строками:

CREATE TABLE names (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    ids VARCHAR(255)
);

INSERT INTO names (name, ids) VALUES
('Имя1', '101, 102'),
('Имя2', '201'),
('Имя3', '301, 302');

Вы можете разделить строки, используя функцию SUBSTRING_INDEX:

SELECT name, SUBSTRING_INDEX(ids, ',', 1) AS id
FROM names;

Обратите внимание, что каждый из этих подходов имеет свои преимущества и недостатки, и выбор решения должен зависеть от конкретного случая использования.