SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 02.11.2012 12:09:24

user0001
Участник
Зарегистрирован: 02.11.2012
Сообщений: 6

Сравнить поля двух таблиц

надо сравнить колонки "code" между исходной таблицей tXXXXXX и конечной таблицей eXXXXXX.

в таблице еХХХХХ есть колнонки
id   code   ref_id

в таблице tХХХХХ есть колнонки
id   code   done

если найден одинаковый code в обеих таблицах, то в таблице tХХХХХ для done надо установить значение "1", если не найдено, то значение "0".

При этом по id сравнивать нельзя!

Спасибо.

PS: Хотелось бы знать, как выглядит MySQL-запрос, чтобы это реализовать.

Отредактированно user0001 (02.11.2012 12:24:51)

Неактивен

 

#2 02.11.2012 12:30:03

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Сравнить поля двух таблиц

а поле tХХХХХ.done какого типа? Если числового, то поставьте ему значение по умолчанию 0 - половины проблема не станет.

осталось найти совпадения:


UPDATE еХХХХХ, tХХХХХ
SET tХХХХХ.done = 1
WHERE еХХХХХ.code = tХХХХХ.code

Неактивен

 

#3 02.11.2012 12:34:48

user0001
Участник
Зарегистрирован: 02.11.2012
Сообщений: 6

Re: Сравнить поля двух таблиц

Shopen написал:

а поле tХХХХХ.done какого типа? Если числового, то поставьте ему значение по умолчанию 0 - половины проблема не станет.

тип enum

Неактивен

 

#4 02.11.2012 12:41:34

user0001
Участник
Зарегистрирован: 02.11.2012
Сообщений: 6

Re: Сравнить поля двух таблиц

Shopen написал:

осталось найти совпадения:


UPDATE еХХХХХ, tХХХХХ
SET tХХХХХ.done = 1
WHERE еХХХХХ.code = tХХХХХ.code

Мускл ответил:
#1054 - Unknown column 'е1010762.code' in 'where clause'


но такая колонка в таблице есть. Проблема с кавычками?

Неактивен

 

#5 02.11.2012 13:04:26

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Сравнить поля двух таблиц

user0001 написал:

Мускл ответил:
#1054 - Unknown column 'е1010762.code' in 'where clause'


но такая колонка в таблице есть. Проблема с кавычками?

Врядли. Приведите структуру таблицы (SHOW CREATE TABLE е1010762) и сам запрос, "как есть"

Отредактированно Shopen (02.11.2012 13:05:53)

Неактивен

 

#6 02.11.2012 13:24:54

user0001
Участник
Зарегистрирован: 02.11.2012
Сообщений: 6

Re: Сравнить поля двух таблиц

CREATE TABLE IF NOT EXISTS `e1010762` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` char(20) NOT NULL,
  `ref_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `code` (`code`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;


CREATE TABLE IF NOT EXISTS `t1010762` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` char(20) NOT NULL,
  `done` enum('0','1') NOT NULL,
  PRIMARY KEY (`id`),
  KEY `code` (`code`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;


Запрос:

UPDATE e1010762, t1010762
SET t1010762.done = "1"
WHERE e1010762.code = t1010762.code

Отредактированно user0001 (02.11.2012 13:25:18)

Неактивен

 

#7 02.11.2012 13:32:32

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Сравнить поля двух таблиц

Ваш код, выполненный буквально - работает:

mysql> CREATE TABLE IF NOT EXISTS `e1010762` (
    ->   `id` int(11) NOT NULL AUTO_INCREMENT,
    ->   `code` char(20) NOT NULL,
    ->   `ref_id` int(11) NOT NULL,
    ->   PRIMARY KEY (`id`),
    ->   KEY `code` (`code`)
    -> ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.16 sec)

mysql> CREATE TABLE IF NOT EXISTS `t1010762` (
    ->   `id` int(11) NOT NULL AUTO_INCREMENT,
    ->   `code` char(20) NOT NULL,
    ->   `done` enum('0','1') NOT NULL,
    ->   PRIMARY KEY (`id`),
    ->   KEY `code` (`code`)
    -> ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.14 sec)

mysql> UPDATE e1010762, t1010762
    -> SET t1010762.done = "1"
    -> WHERE e1010762.code = t1010762.code;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0

Неактивен

 

#8 02.11.2012 15:28:39

user0001
Участник
Зарегистрирован: 02.11.2012
Сообщений: 6

Re: Сравнить поля двух таблиц

я виноват, забыл очень важную вещь:

в таблице eXXXXX примерно 450 000 записей
в таблице tXXXXX примерно 570 000 записей

при этом таблица eXXXXX содержит много повторяющихся кодов (колонка "code") из таблицы tXXXXX (несмотря на то что в ней меньше записей).

Неактивен

 

#9 02.11.2012 15:38:42

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Сравнить поля двух таблиц

1054 - синтаксическая ошибка, поэтому она не может зависеть от того сколько записей в таблице. Наполнение таблицы важно для запроса, но не может повлиять на появление той ошибки, которую вы привели

Неактивен

 

#10 02.11.2012 15:47:03

user0001
Участник
Зарегистрирован: 02.11.2012
Сообщений: 6

Re: Сравнить поля двух таблиц

user0001 написал:

я виноват, забыл очень важную вещь:

это не к синтаксической ошибке, - это я просто забыл дописать.

Неактивен

 

Board footer

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