Задавайте вопросы, мы ответим
Вы не зашли.
Имеется:
Таблица 1 - tst_003_tb_01_calcul - основная
Таблица 2 - tst_003_tb_02_calcul - подчинённая
Тип связи 1:М
Вопрос
Можно ли сделать вычисляемое поле со сцепкой текста в таблице "tst_003_tb_01_calcul" или в отдельной таблице (запросе)?
Чтобы сцепка текста происходила по условию:
Если
поле "pol_1" таблицы "tst_003_tb_01_calcul" = поле "pol_1" таблицы "tst_003_tb_02_calcul"
и
поле "idsub" таблицы "tst_003_tb_01_calcul" = поле "idsub" таблицы "tst_003_tb_02_calcul"
то сцепить значения записи поля "pol_4" таблицы "tst_003_tb_02_calcul" для соответствующего значения поля "pol_1" таблицы "tst_003_tb_01_calcul"
Дополнительные условия сцепки:
- сцепляемые значения были в кавычках (типа "< … >" или другие ) и через запятую и
- результат сцепки располагался в поле "pol_scepka" таблицы "tst_003_tb_01_calcul"
Пример результата:
< ТЕКСТ _ ЗАПИСИ pol_4_zp 1> , < ТЕКСТ _ ЗАПИСИ pol_4_zp 2> , < ТЕКСТ _ ЗАПИСИ pol_4_zp 3>
Код таблиц
Отредактированно sql157 (14.03.2017 13:18:13)
Неактивен
GROUP_CONCAT()
Неактивен
vasya написал:
GROUP_CONCAT()
Что-то сделал... Но выдаёт ошибку
Код
Отредактированно sql157 (13.03.2017 19:56:53)
Неактивен
судя по ошибке перед запросом есть что-то ещё
Неактивен
vasya написал:
судя по ошибке перед запросом есть что-то ещё
Да вроде нет...
Сделал немного по другому..
Код 2
Неактивен
sql157 написал:
Другая ошибка
Ошибка SQL (1055): Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column '01tst.t01.pol_1' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by */
http://sqlinfo.ru/articles/info/18.html
sql157 написал:
Вопрос.
Может это прояснит причину проблем с кодом 1?
нет, подозреваю. что это ошибка вашего клиента
вы по прежнему на hedisql?
попробуйте выполнить в другом клиенте.
Неактивен
vasya написал:
http://sqlinfo.ru/articles/info/18.html
Статью изучил, но как приметь к своей задаче, что-то мне силёнок не хватает...
sql157 написал:
вы по прежнему на hedisql?
попробуйте выполнить в другом клиенте.
Да.
Пробую в "workbench ".
Ошибка на стадии ввода (см. скрин):
"Syntax error `select` (identifier) is not valid input at this position"
Запустил запрос в "workbench ".
Такая же ситуация:
Код 1 - ошибка
"Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near "
Код 2 - без поля `pol_1`- РАБОТАЕТ
Попробовал через консоль Виндовс, но не получается запустить
Извините, что вопросы не по теме, но всё же
Вопрос.
Консоль
1. Правильно ли ввёл запрос?
2. Как запустить запрос?
3. Как вернуться в исходное положение?
Т.к. зарос ввёл. а дальше не могу не удалить не запустить
Статья
4. Как применить статью к моей задаче?
Отредактированно sql157 (14.03.2017 11:41:08)
Неактивен
судя по скрину у вас какой-то неправильный пробел после слова select
возьмите второй запрос и отредактируйте его до первого или наберите первый с клавиатуры (не копируя предыдущий вариант)
в консоли после набора запроса нажимайте энтер
ссылку на статью я дал, чтобы объяснить смысл ошибки 1055
нужно ли применять изложенные в ней методы или нет - зависит от того какие поля вы хотите выбирать
Неактивен
vasya написал:
наберите первый с клавиатуры (не копируя предыдущий вариант)
Набрал с клавиатуры
Ошибок нет, но ошибка при запуске
Код 3
Неактивен
сделайте пример на sqlfiddle.com
Неактивен
vasya написал:
сделайте пример на sqlfiddle.com
Вроде сделал...Слёту не получилось разобраться с этим сайтом.
Разбираюсь
Пока, что смог
http://sqlfiddle.com/#!9/241c6f
PS.
Код таблиц продублировал в вопросе
Неактивен
у меня ваш запрос отрабатывает без ошибок
Неактивен
sql157 написал:
Если
поле "pol_1" таблицы "tst_003_tb_01_calcul" = поле "pol_1" таблицы "tst_003_tb_02_calcul"
и
поле "idsub" таблицы "tst_003_tb_01_calcul" = поле "idsub" таблицы "tst_003_tb_02_calcul"
однако в вашем запросе условие только на idsub
Неактивен
vasya написал:
однако в вашем запросе условие только на idsub
Не понимаю, ваше сообщение...
Пока плаваю в этих вопросах...
Вопрос
Не могли бы разъяснить или скорректировать мой запрос как вы считаете правильным, чтобы выполнить по двум условиям.
Если у вас работает, получается у меня проблемы с клиентом?
Пробую через консоль.
Ввёл запрос.
Нажал "Ввод"
И никакой реакции и консоль просто блокируется: ввести команду не получается, удалить старую команду, тоже нельзя
Вопрос
Консоль
1. Может есть какая особенность при вводе?
2. Как активировать консоль после ввода?
Прилагаю скрин как я запускал консоль
Отредактированно sql157 (14.03.2017 16:37:06)
Неактивен
; после команды поставьте и нажимайте энтер
Неактивен
sql157 написал:
Не понимаю, ваше сообщение...
Пока плаваю в этих вопросах...
Вопрос
Не могли бы разъяснить или скорректировать мой запрос как вы считаете правильным, чтобы выполнить по двум условиям.
начните с постановки задачи - действительно ли вам для сцепки нужно совпадение по двум полям?
если да, то сделайте соответствующие тестовые данные, которые будут отображать эту ситуацию (сейчас данные таковы, что если совпадает значение одного поля, то совпадает и второе поле)
и см http://sqlinfo.ru/forum/viewtopic.php?id=3210
Неактивен
vasya написал:
; после команды поставьте и нажимайте энтер
Получил список всех баз данных:
Неактивен
убирайте t01.pol_1, меняйте режим или переписывайте запрос
Неактивен
vasya написал:
убирайте t01.pol_1, меняйте режим или переписывайте запрос
Вар 1
Убрал
"t01.pol_1"
Получилось
mysql>
Отредактированно sql157 (14.03.2017 18:02:19)
Неактивен
не знаю, у меня скопированный из вашего сообщения запрос отрабатывает в Workbench без ошибки
p.s. у кого-нибудь есть идеи?
Неактивен
Mysql query browser как и workbench как и прочие гуевые клиенты порой странно себя ведут. Я предложил бы отладить запрос в родном ванильном mysql-клиенте сперва, дальше попробовать вставить его в код.
Неактивен
Проблема решена.
В месте ошибки был перенос строки
Неактивен
deadka написал:
Я предложил бы отладить запрос в родном ванильном mysql-клиенте сперва, дальше попробовать вставить его в код.
Чё за "ванильный mysql-клиент"?
Неактивен
Результирующий ответ
ОШИБКА 1
По ошибке заявленной в теме.
Запрос опубликованный в теме в workbench читается без ошибок.
Но на текущий момент, после запуска появляется ошибка:
"Error Code: 1055. Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column '01tst.t01.pol_1' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by"
Решение ошибки 1.
Т.к. в "group by" надо указывать все колонки которые не учавствуют в групповых функциях, т.е. добавьте t01.pol_1 в group by.
Добавляем в "group by" поле "t01.pol_1", т.е. в результате "group by t01.idsub, t01.pol_1".
Запускаем
Всё работает.
ОШИБКА 2
По ошибке указанной на скриншоте http://prnt.sc/ejuvfr
При добавлении данного запроса
"select t01.idsub, t01.pol_1, GROUP_CONCAT(t02.pol_4) AS scepk from tst_003_tb_01_calcul t01 inner join tst_003_tb_02_calcul t02 ON t02.idsub = t01.idsub group by t01.idsub"
в workbench появляется ошибка "Syntax error: '02' (identifier) is not valid input at this position"
Решение ошибки 2.
Переношу код в блокнот.
Кликаю ДВА РАЗА по каждому элементу кода.
Обнаруживается, что элемент кода "t02 ON" выделяете как одно слово, а не два слова по отдельности через пробел. См. скрин http://prnt.sc/ek5bjy Удаляю пробел, ставлю пробел Запускаю запрос. Получаю ошибку: "Error Code: 1054. Unknown column 't02.idsub ' in 'on clause'" Где если присмотреться, то видно, что в " 't02.idsub ' " между "t02.idsub" и закрывающим " ' " находится пробел, хотя в коде он и должен быть.. Но читается он как одно слово с "t02.idsub".
См. скрин http://prntscr.com/ek5dcp
Удаляю пробел, ставлю пробел.
Запускаю запрос.
Получаю ошибку: "Error Code: 1054. Unknown column ' t01.idsub' in 'on clause'" Та же проблема, что и в предыдущем случае, только пробел перед словом "t01.idsub" и открывающим " ' "
Удаляю пробел, ставлю пробел.
Запускаю запрос.
Всё работает
Отредактированно sql157 (15.03.2017 11:42:56)
Неактивен