【问题标题】:How to INSERT / WHERE NOT EXIST in SQL [duplicate]如何在 SQL 中插入 / 不存在的地方 [重复]
【发布时间】:2017-03-16 20:00:06
【问题描述】:

我对下一句有问题:

INSERT INTO `pasajeros` 
( 
    `nombre`,
    `apellidos`,
    `email`,
    `password`,
    `telefono`
) 
VALUES 
(
    'Alexandra',
    'Gonzalez',
    'cesa@cesar3.com',
    '1234567!',
    '04242344556' 
) 
WHERE NOT EXISTS 
( 
    SELECT  * 
    FROM    `transportistas` 
    WHERE   `email` = 'cesa@cesar3.com'
);

我的代码有什么问题?如果电子邮件未在另一个表中使用,我需要进行插入。这是我的方法,但我不知道为什么我的查询失败了。

【问题讨论】:

  • 错误是什么?
  • #1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 1 行的 'WHERE NOT EXISTS ( SELECT * FROM transportistas WHERE email = 'cesa@cesar3.c' 附近使用正确的语法

标签: mysql sql


【解决方案1】:

我不相信您可以将Valueswhere 子句一起使用。但是您可以使用 select 语句插入,它可以很好地处理 where 子句。

INSERT INTO `pasajeros` 
( 
    `nombre`,
    `apellidos`,
    `email`,
    `password`,
    `telefono`
) 
Select * from (
select 
     'Alexandra' as `nombre`,
     'Gonzalez' as `apellidos`,
     'cesa@cesar3.com' as `email`,
     '1234567!' as `password` ,
     '04242344556' as `telefono`
    ) i
WHERE NOT EXISTS 
( 
    SELECT  * 
    FROM    `transportistas` 
    WHERE   `email` = i.email
);

【讨论】:

  • "nombre = 'Alexandra'" - 我认为这行不通。您应该会收到类似“未知列nombre”的错误
  • @那种东西可以在 SQL Server 中工作......而我从来没有真正使用过 MySQL。别名只能用as吗?
  • @PaulSpiegel 没错,保罗。我收到这些错误,我该如何解决?
  • @Brad 更新的版本应该可以工作。但是 - 你甚至不需要任何别名。
  • @PaulSpiegel,是的,我知道它们不是必需的,但为了清楚起见,我确实希望拥有它们。
【解决方案2】:

做你想做的事情的正确方法是定义一个唯一的索引/约束:

create unique index unq_pasajeros_email on pasajeros(email);

数据库然后会保护数据。

这比尝试在应用层执行此操作要好得多,因为如果有人手动更新数据,它可以防止重复。

【讨论】:

  • unq_pasajeros_email 是什么意思?电子邮件在pasajerostransportistas 表中必须是唯一的,这两种情况下的字段都称为email
  • @CesarJrRodriguez 。 . .然后,您需要两个唯一索引,每个表一个。但是,您的问题只涉及pasajeros
猜你喜欢
  • 2012-10-18
  • 1970-01-01
  • 2020-12-16
  • 2021-09-16
  • 2013-03-15
  • 2018-09-30
  • 1970-01-01
  • 1970-01-01
  • 2019-01-11
相关资源
最近更新 更多