MySQL insert where not with conditional statement
Posted
技术标签:
【中文标题】MySQL 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');
【问题讨论】:
【参考方案1】:不幸的是,您不能在子查询中插入表并从同一个表中进行选择,但是如果您对 sku
和 tablename
列有唯一约束,那么您可以使用 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');
【讨论】:
以上是关于MySQL insert where not with conditional statement的主要内容,如果未能解决你的问题,请参考以下文章
insert into 和 where not exists
Postgresql中无则插入的使用方法INSERT INTO WHERE NOT EXISTS
INSERT <table> (x) VALUES (@x) WHERE NOT EXISTS ( SELECT * FROM <table> WHERE x = @x) 会导
MySQL 语句级避免重复插入—— Insert Select Not Exist