我想在表格中不存在名称时插入一行。
当桌子为空时,它不能插入任何东西,任何人都可以帮助我吗?
这是我的代码:
INSERT INTO `ediftpdb`.`users`(
name
,passwd
,vendor
)
SELECT
'L001'
,'12345678a'
,'MKTPLS'
FROM `ediftpdb`.`users`
WHERE NOT EXISTS (SELECT * FROM `ediftpdb`.`users` WHERE name='L001' AND vendor = 'MKTPLS' ) LIMIT 1;
P.S。
我找到了一些有趣的东西,当ediftpdb
。users
为空时,代码如下所示不返回任何内容。
SELECT
'L001'
,'12345678a'
,'MKTPLS'
FROM `ediftpdb`.`users`
答案 0 :(得分:2)
正如@Martin Smith指出的,当表ediftpdb.users
为空时,FROM ediftpdb.users
结果没有行。如果它有100行,那么你的语句会尝试将INSERT
100条(相同的)记录放入表中。
试试这个:
INSERT INTO
...
SELECT
'L001'
,'12345678a'
,'MKTPLS'
FROM (SELECT 1) AS dummy
WHERE NOT EXISTS ...
答案 1 :(得分:2)
更好的方法是在名称和供应商列上创建唯一的多部分索引:
CREATE UNIQUE INDEX name_vendor ON ediftpdb.users( name, vendor )
然后:
INSERT IGNORE INTO ediftpdb.users ( name, passwd, vendor )
VALUES ( 'L001', '12345678a', 'MKTPLS' )
将完全按照您的意愿行事。