неравный брак (replace)

  • Автор темы Автор темы macros
  • Дата начала Дата начала

macros

Guest
неравный брак (replace)

Здравствуйте, друзья.
Что- то совсем зашился.
Есть две таблицы
первая
CREATE TABLE `books`.`example` (
`EAN` bigint( 13 ) unsigned NOT NULL default '0',
`TITLE` char( 150 ) NOT NULL default '',
`b1` tinyint( 3 ) NOT NULL default '0',
`b2` tinyint( 3 ) NOT NULL default '0',
`PRICE` char( 10 ) NOT NULL default '',
`CLASSIF` smallint( 4 ) unsigned NOT NULL default '0',
PRIMARY KEY ( `EAN` )
) TYPE = MyISAM ;
и вторая
CREATE TABLE `books`.`example1` (
`EAN` bigint( 13 ) unsigned NOT NULL default '0',
`TITLE` char( 150 ) NOT NULL default '',
`b1` tinyint( 3 ) NOT NULL default '0',
`PRICE` char( 10 ) NOT NULL default '',
`CLASSIF` smallint( 4 ) unsigned NOT NULL default '0',
PRIMARY KEY ( `EAN` )
) TYPE = MyISAM ;

когда не было лишнего поля все решалось
replace example select * from example1
а теперь нужно чтобы сработал replace не затрагивая поля 'b2'
его потом нужно будет менять через другой подобный replace.
Никак не получается слепить запрос.
Те нужен replace определенных полей не трогая лишние.

С уважением.
 
а так не работает? (или что-то подобное):

REPLACE INTO example(EAN, title, b1, PRICE, CLASSIF) SELECT ENA, title, b1, PRICE, CLASSIF FROM example1
 
Пробовал

Table 'books.example' doesn't exist

Вот и весь ответ. Там как-то надо указывать принадлежность полей таблице через точки. А как?
Метод научного тыка себя исчерпал. а примерчика толкового не нашел нигде
 
В mysql 3.x - никак, в 4.х надо смотреть в сторону UPDATE:

Starting with MySQL Version 4.0.4, you can also perform UPDATE operations that cover multiple tables:
UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;
 
UPDATE не катит,
потому как в случае, если уникального ключа нет, в таблицу должна вставляться новая строка
 
REPLACE INTO example(EAN, title, b1, PRICE, CLASSIF) SELECT EAN, title, b1, PRICE, CLASSIF FROM example1

Так работает но заодно изменяется поле b2, а этого делать никак нельзя.
 
REPLACE - DELETE + INSERT так что наверно тебе это неподходит

REPLACE works exactly like INSERT, except that if an old record in the table has the same value as a new record on a unique index, the old record is deleted before the new record is inserted.
 
И какой тогда выход?
И есть ли он?
Проверять и вставлять по одной строке ИМХО очень медленно, ведь таблицы могут быть большие.
 
Спасибо, попробую.
Да и вот еще вопрос. Я тут подумал чуток, задачу можно (и наверное должно) сформулировать по другому. Не будет ли хамством поднять тему?
 
Сверху