【问题标题】:SQL INSERT with an if statement带有 if 语句的 SQL INSERT
【发布时间】:2012-03-29 14:54:22
【问题描述】:

我有一个名为notification 的表,有两列:

  • 提供者
  • 电子邮件

值如下所示:

  • 苹果 | apple@apple.com
  • NBC | nbc@nbc.com
  • NBC | me@me.com
  • ABC | abc@abc.com
  • ABC | me@me.com

对于没有电子邮件 me@me.com 的所有提供商,我想插入另一行,其中包含提供商和电子邮件 them@them.com。例如,在上述查询中,INSERT 语句的结果将是:INSERT INTO notification VALUES ('apple', 'them@them.com')

我有一张这样的数千行表,我该如何写这样的INSERT 语句?

【问题讨论】:

  • 使用t-sql——transact sql有条件表达式根据逻辑表达式执行不同的语句
  • 鉴于您的测试数据,您是否也想为 abc 插入一行?
  • 提供商abc 也缺少电子邮件me@me.com(但确实有abc@me.com)。

标签: python mysql sql


【解决方案1】:
INSERT INTO notification
SELECT DISTINCT provider, 'them@them.com'
FROM notification
WHERE provider NOT IN
(SELECT DISTINCT provider
FROM notification
WHERE email = 'me@me.com')

【讨论】:

  • distinct 的内部查询就在那里,而且性能也更好(稍微)(与外部 select 不同)
  • 这可以插入重复的行(在本例中为“abc”)。
【解决方案2】:

这应该会让你得到你所追求的:

insert into notification (provider, email)
select distinct provider, 'them@them.com'
from notification
where provider not in (
        select provider
        from notification
        where email like 'me@me.com'
    )

【讨论】:

  • 不。这将为每个不像 me@me.com 的记录插入一条新记录,而不是为每个没有 me@me.com 的提供者插入一条新记录。
  • 我删除它的速度几乎和我发布它的速度一样快。
猜你喜欢
  • 1970-01-01
  • 2015-04-30
  • 2011-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多