2012-03-31 10 views
0

Ziel:MySQL einsetzen, wo nicht mit bedingten Anweisung

  • Mit nur MySQL, legen Sie sku, Tabellenname, Schnecken-Tabelle, wenn ein sku & Tabellennamen sind nicht nicht bereits festgelegt. Ich habe mehrere Tabellen, die denselben Sku haben können, aber sie sind nicht gleich. Also muss es auf sku + tablename übereinstimmen.
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. 

Tabellen

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; 

Gebrochene MySQL Code

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

Antwort

0

Leider kann man nicht in eine Tabelle einfügen und aus derselben Tabelle in einer Unterabfrage wählen, aber wenn Sie eine eindeutige Einschränkung auf die sku und tablename Spalten haben, dann können Sie INSERT IGNORE INTO ... benutzen Sie der gleiche Effekt.

+0

Es tut mir leid, ich bin ein „Anfänger“ an diesem können Sie geben mir ein Beispiel dafür? Ich kann einige Aspekte der Tabellen ändern, aber nicht die ID in der Slugs-Tabelle. – Brad

+0

'ALTER TABLE \' Schnecken \ 'ADD UNIQUE INDEX (\' sku \ ', \' Tabellenname \ ');' – Neil

+0

Ich bin mir nicht sicher, dass das funktionieren würde. table1 könnte sku = 123 haben und table2 könnte auch sku 123 haben ... – Brad

0

Ich konnte dies mit dem folgenden zu arbeiten. Dank j_wright in einem 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' 
); 

--- ODER DIESE SCHEINT ------- zu ARBEITEN

INSERT INTO `slugs` (`sku`, `tablename`) 
select `SKU`, 'tableA' 
from `tableA` 
WHERE `SKU` NOT IN 
(select `sku` from `slugs` where `tablename` = 'tableA');