MySQL вставьте куда не с условным оператором - PullRequest
0 голосов
/ 01 апреля 2012

Цель:

  • Используя только MySQL, вставьте sku, tablename, slugs table, если sku & name таблицы еще не установлены. У меня есть несколько таблиц, которые могут иметь один и тот же sku, но они не одинаковы. Так что это должно совпадать по sku + tablename.
 table1
      SKU = 123
      SKU = 234
table2
  SKU = 1234
  SKU = 123
  SKU = 45234

slugs final result should be like

slugs
  sku = 123 , table = table1
  sku = 234 , table = table1
  sku = 1234, table = table2
  sku = 123, table = table2
  sku = 45334, table = table2

I need to be able to look up sku's based off of the table name.

таблицы

CREATE TABLE `slugs` (
  `id` bigint(20) NOT NULL,
  `slug` varchar(500) default NULL,
  `tablename` varchar(129) default NULL,
  `sku` varchar(100) default NULL,
  `deleteme` tinyint(4) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE `tableA` (
  `NAME` varchar(160) default NULL COMMENT 'The products name.',
  `SKU` varchar(100) NOT NULL default '' COMMENT 'Advertisers unique identifier for the product.',
  PRIMARY KEY  (`SKU`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Сломанный код MySQL

INSERT INTO `slugs` (`sku`, `tablename`)
Select `SKU`, 'tableA'
from `tableA`
where not exists
(SELECT `slugs`.`sku` !=  `tableA`.`SKU` AND `slugs`.`tablename` !=  'tableA'); 

Ответы [ 2 ]

0 голосов
/ 02 апреля 2012

Я смог заставить это работать, используя следующее. Благодаря j_wright в iRC

INSERT INTO `slugs` (`sku`, `tablename`)
SELECT `SKU`, 'tableA', `NAME` FROM `tableA`
WHERE NOT EXISTS (
     SELECT `sku`, `tablename` FROM `slugs`
     WHERE `sku` = `tableA`.`SKU` and `tablename` = 'tableA'
);

--- ИЛИ ЭТО РАБОТАЕТ -------

INSERT INTO `slugs` (`sku`, `tablename`)
select `SKU`, 'tableA'
from `tableA`
WHERE `SKU` NOT IN
(select `sku` from `slugs` where `tablename` = 'tableA');
0 голосов
/ 01 апреля 2012

К сожалению, вы не можете вставить в таблицу и выбрать из этой же таблицы в подзапросе, но если у вас есть уникальное ограничение для столбцов sku и tablename, вы можете использовать INSERT IGNORE INTO ... для получения того же эффекта.

...