【问题标题】:MySQL insert where not with conditional statementMySQL insert where not with conditional statement
【发布时间】:2012-04-15 04:05:54
【问题描述】:

目标:

  • 当尚未设置 sku 和表名时,仅使用 MySQL 插入 sku、表名、slugs 表。我有多个表可以具有相同的 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'); 

【问题讨论】:

    标签: mysql mysql5 mysql-5.0


    【解决方案1】:

    不幸的是,您不能在子查询中插入表并从同一个表中进行选择,但是如果您对 skutablename 列有唯一约束,那么您可以使用 INSERT IGNORE INTO ... 来获得相同的效果。

    【讨论】:

    • 对不起,我是这方面的“新手”,你能举个例子吗?我可以更改表的某些方面,但不能更改 slugs 表中的 id。
    • ALTER TABLE `slugs` ADD UNIQUE INDEX(`sku`, `tablename`);
    • 我不确定这是否可行。 table1 可能有 sku = 123 并且 table2 也可能有 sku 123...
    • @Brad 该索引仅强制作为对的列的唯一性;它不关心各个列中是否存在重复项。
    • 使用 Alter 表我可以做到: INSERT IGNORE INTO slugs (sku, tablename) SELECT SKU, 'tableA' FROM tableA;我正在测试这之间的速度差异,我的答案...最快的得到绿色复选标记。
    【解决方案2】:

    我能够使用以下方法使其正常工作。感谢 iRC 中的 j_wright

    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');
    

    【讨论】:

      猜你喜欢
      • 2021-05-29
      • 1970-01-01
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-12
      • 1970-01-01
      • 2016-06-05
      • 2011-11-05
      相关资源
      最近更新 更多