С Новым годом! Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
29 / 26 / 18
Регистрация: 02.04.2015
Сообщений: 316

Ограничение значений для столбца множеством значений из другого столбца другой таблицы

28.01.2019, 23:49. Показов 3029. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый. Не могу нагуглить, допустим есть 2 таблицы: t1 и t2
В t1, допустим, кроме всего прочего есть поле:
SQL
1
`name` VARCHAR (250) UNICUE NOT NULL
Необходимо такое же поле для t2 "ограничить" значения чем-то вроде ENUM(SELET DISTINCT(`t1`.`name`)...).
Как это правильно делается? Вариант с множеством на момент создания таблцы - несерьёзен. В процессе эксплуатации значения t1 растут как на дрожжах, поэтому проверка возможных вариантов значений в t2 должна быть "онлайн"...

Я догадываюсь как это реализовать доп.условиями запроса (точнее подзапросом), но мне кажется, что это было/есть на уровне самой таблицы...
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.01.2019, 23:49
Ответы с готовыми решениями:

Обновление столбца одной таблицы из другого столбца другой таблицы (база одна)
Доброго времени суток! Очень нуждаюсь в помощи. Значит: 2 таблицы 1 - product, 2-product_description Нужно обновить столбец...

SQL. Вывод значений из таблицы и подсчет количества этих значений в другой таблице
Задание звучит так: Для таблиц user и phones, где соответствие записей определяется равенством user.id = phones.user_id привести 2 разных...

Получить среднее значение столбца для групп значений
Например, в таблице records есть поле date, обозначающее дату записи, и поле price, обозначающее цену. Нужно вывести для каждой даты...

6
Zero day
 Аватар для Meridian21
267 / 231 / 78
Регистрация: 16.12.2015
Сообщений: 943
Записей в блоге: 4
29.01.2019, 08:20
ИмяПользователя, вариант использовать триггер before insert?
1
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
29.01.2019, 09:45
Лучший ответ Сообщение было отмечено ИмяПользователя как решение

Решение

А чем FOREIGN KEY для этого поля в t2 не устроило?
1
29 / 26 / 18
Регистрация: 02.04.2015
Сообщений: 316
29.01.2019, 09:49  [ТС]
Вроде - нашёл, что хотел, единственное: с ограничением. Для того, что бы построить нужную мне связку поле со значениями в первой таблице должно быть первичным ключом. А оно у меня текстовое. Если попытаться сделать его VARCHAR(250) - ругается на "превышение объёма" для построения индекса. Методом тыка получилось создать PRIMARY KEY для поля VARCHAR(150) - пока что мне этого хватит... почему-то казалось, что для такого ограничения не обязательно упираться именно в PRIMARY KEY а должно было хватить UNIQUE, но не хватило))
Сама конструкция в итоге выглядит у меня вот так:
SQL
1
ALTER TABLE `t2` ADD FOREIGN KEY (`some_cel`) REFERENCES `t1`(`id`) ON DELETE RESTRICT ON UPDATE RESTRICT;
Добавлено через 2 минуты
Цитата Сообщение от ltv_1953 Посмотреть сообщение
А чем FOREIGN KEY для этого поля в t2 не устроило?
Не успел отправить, чуть выше написал:
1) Не смог о нём вчера на ночь глядя вспомнить, вспомнил только с утра (это основная причина);
2) Ограничение по PRIMARY KEY - очень хотелось бы обойтись UNIQUE, но не вышло((

В рамках текущей моей задачи - решение удовлетворительное, т.е. "задача решена", а на будущее - просто интересно, есть механизм реализации подобного именно для UNIQUE столбцов, без PRIMARY KEY? )
0
411 / 365 / 142
Регистрация: 09.04.2011
Сообщений: 1,051
29.01.2019, 18:55
ИмяПользователя, PRIMARY KEY для создания FOREIGN KEY совсем не обязателен, достаточно иметь уникальный индекс по `some_cel` в `t2`
1
29 / 26 / 18
Регистрация: 02.04.2015
Сообщений: 316
29.01.2019, 21:05  [ТС]
Цитата Сообщение от retvizan Посмотреть сообщение
PRIMARY KEY для создания FOREIGN KEY совсем не обязателен, достаточно иметь уникальный индекс по `some_cel` в `t2`
- Спасибо, я себе это запомню, однако в контексте текущей задачи (каюсь - я её очень плохо описал) опять "мимо": у меня связь от одного (t1) ко многим (t2). Поэтому уникальность для t2, в контексте моей текущей задачи, не подходит... очень хотелось обойтись "уникальностью" именно в контексте t1. Через PRIMARY KEY получилось добиться нужного для меня поведения, но с существенным ограничением в 150 символов варчара.

Когда-то приходилось читать документацию к ораклу, постгресу и MS SQL, видимо из-за этого каша в голове - в каком-то из тех серверов, мне кажется, я встречал именно нужную мне реализацию "из коробки"... почему-то был уверен, что в MySQL оно тоже давно есть... но не нашёл))
0
411 / 365 / 142
Регистрация: 09.04.2011
Сообщений: 1,051
29.01.2019, 22:36
ИмяПользователя, это я не внимательно написал
требуется уникальность в родительской таблице, т.е. в вашем случае как раз поле в таблице t1

почему у вас изначально не получилось, нужно смотреть по конкретному коду ошибки
список всех возможных причин с привязкой к коду ошибки есть в этой статье
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.01.2019, 22:36
Помогаю со студенческими работами здесь

Значение одного столбца = значению другого столбца
SELECT FROM WHERE значение одного столбца = значению другого столбца ; Как построить этот запрос ? SELECT FamilyName, Name,...

Переместить два столбца одной таблицы со строкой в поле другой таблицы
Доброго времени суток, добрый форумчанин. Возникла проблема следующего плана: Есть две таблицы: таблица1 (iblock_section_id, id) и...

Вывод результатов из одной таблицы и одного столбца в два разных столбца
Ребят помогите, измучалась совсем, не знаю как решить. Есть таблица Таблица t2 Id Pid Pr Text 1 1 0 'sub text1 1' ...

Выборка определенного количества значений столбца
Здравствуйте. Прошу помощи в специалистов. Имеется таблица users, в ней столбцы: id, name, active Таблица заполнена. В столбце...

Update столбца данными из таблицы другой базы
Здравствуйте. прошу помощи. есть две базы: db_backup_new, db_backup_old. в первой таблица (content) с поврежденными данными. во...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru