SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 15.05.2016 22:36:20

eti666
Участник
Зарегистрирован: 15.05.2016
Сообщений: 5

INSERT SELECT?

Здравствуйте господа, нуждаюсь в Вашей помощи.
Мне нужно вставить в таблицу loginId, testId из других таблиц.
dat, mark вставляю из файла.
"INSERT INTO results.results(loginId, testId,dat, mark) VALUES ((select idLogin FROM results.logins),(select idTest FROM results.tests),?,?)"- возвращает ошибку Subquery returns more than 1 row
Вставлял LIMIT 1 но выводит всегда первый results.logins, results.tests
Заранее благодарен.

Отредактированно eti666 (15.05.2016 22:42:45)

Неактивен

 

#2 15.05.2016 22:44:22

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5829

Re: INSERT SELECT?

(select idLogin FROM results.logins) - возвращает несколько строк (столбец)

Неактивен

 

#3 15.05.2016 22:48:10

eti666
Участник
Зарегистрирован: 15.05.2016
Сообщений: 5

Re: INSERT SELECT?

а можешь направить хотя бы на правильное решение??

Неактивен

 

#4 15.05.2016 22:51:37

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5829

Re: INSERT SELECT?

если вы используете VALUES, то в каждых круглых скобках после него вы указываете данные одной строки

если вы хотите добавить много строк из других таблиц, то
INSERT INTO results.results(loginId, testId) select idLogin, idTest из нужных вам таблиц ;
но данные из файла вы сюда не прикрутите

Неактивен

 

#5 15.05.2016 22:54:43

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5829

Re: INSERT SELECT?

точнее если dat, mark константы, то конечно их можно добавить в select
если же они различны для разных строк, то вам сначала нужно будет загрузить их из файла в какую-то табличку и потом делать
INSERT INTO results.results(loginId, testId,dat, mark) select из трех таблиц;

Неактивен

 

#6 15.05.2016 23:10:26

eti666
Участник
Зарегистрирован: 15.05.2016
Сообщений: 5

Re: INSERT SELECT?

вот есть три таблицы:
1) справочник логинов logins с полями: idLogin (счетчик), name (строковое);
2) справочник тестов tests с полями: idTest (счетчик), name (строковое);
3) оперативно–учетная таблица результатов results с полями: loginId (целое поле для связи), testId (целое поле для связи), dat (дата), mark (целое).

и вот в третью нужно loginId, testId записать с таблиц, а dat, mark  с файла загрузить
вот такая запись
cool;oop;2013-03-20;8.5

cool-login
oop- test
2013-03-20 - dat
8.5 - mark

и нужно чтобы в третьей таблице вывелись idLogin, idTest

первую и вторую таблицу заполнил, а как связать их между собой не получается

Неактивен

 

#7 15.05.2016 23:24:28

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5829

Re: INSERT SELECT?

eti666 написал:

и вот в третью нужно loginId, testId записать с таблиц, а dat, mark  с файла загрузить

А если в файле X строк, в таблице логинов Y, а в таблице тестов Z ?

Правильно ли я понимаю, что вам нужно загрузить данные из файла в третью таблицу, но, чтобы вместо строковых значений login и test брались их идентификаторы из таблиц справочников?

Неактивен

 

#8 15.05.2016 23:26:17

eti666
Участник
Зарегистрирован: 15.05.2016
Сообщений: 5

Re: INSERT SELECT?

да

Неактивен

 

#9 15.05.2016 23:55:14

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5829

Re: INSERT SELECT?

LOAD DATA INFILE 'файл.txt'
  INTO TABLE results
  FIELDS TERMINATED BY ';'
  (@a, @b, dat, mark)
  SET loginId = (select idLogin FROM logins where name = @a),
    testId = (select idTest FROM tests where name = @b);
 


http://dev.mysql.com/doc/refman/5.6/en/load-data.html

Неактивен

 

#10 16.05.2016 00:06:08

eti666
Участник
Зарегистрирован: 15.05.2016
Сообщений: 5

Re: INSERT SELECT?

vasya написал:

LOAD DATA INFILE 'файл.txt'
  INTO TABLE results
  FIELDS TERMINATED BY ';'
  (@a, @b, dat, mark)
  SET loginId = (select idLogin FROM logins where name = @a),
    testId = (select idTest FROM tests where name = @b);
 


http://dev.mysql.com/doc/refman/5.6/en/load-data.html

спс огромное))

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson