【问题标题】:How to insert a value using mysql query in DB for all the rows except few如何在数据库中使用 mysql 查询为除少数之外的所有行插入一个值
【发布时间】:2014-07-23 15:41:26
【问题描述】:

我有一个大约 6000 行的 DB 表结构,如下所示:

carrier|make|model

我需要创建一个 sql 查询,这样我就可以为除少数几个运营商(例如 ATT、bell-mobility、virgin Canada 和 Warranty ATT)之外的所有运营商插入一个 Make-Model 对。

我怎样才能完成这项工作?

【问题讨论】:

  • 插入新表?
  • insert 需要在给定结构的同一个表中
  • 你的数据源是什么??
  • @AbhikChakraborty 我的错……我重新更正了自己
  • @Rahul 他说该表有 6000 行。这不是空的。

标签: mysql sql sql-insert


【解决方案1】:
INSERT INTO table_name (carrier, make, model)
SELECT DISTINCT carrier, "Samsung", "Galaxy S5"
FROM table_name
WHERE carrier NOT IN ( 'ATT', 'bell-mobility', 'virgin Canada', 'Warranty ATT' )

要添加多个新品牌和型号,您可以这样做:

INSERT INTO table_name (carrier, make, model)
SELECT a.carrier, b.make, b.model
FROM (SELECT DISTINCT carrier
      FROM table_name
      WHERE carrier NOT IN ( 'ATT', 'bell-mobility', 'virgin Canada', 'Warranty ATT' ) AS a
CROSS JOIN
    (SELECT "Samsung" AS make, "Galaxy 5" AS model
     UNION
     SELECT "Nokia" AS make, "Lumia" AS model
     ...
    ) AS b

顺便说一句,这个问题表明您的数据库设计很差。您应该有一个运营商表,其中列出了您知道的所有运营商,您不应该从列出每个运营商的品牌和型号的表格中获取它。这是正常化不佳的一个例子,因为如果您停止为某些运营商提供手机,您将完全忘记它们的存在。

【讨论】:

  • M I right for "SELECT DISTINCT carrier, :new_make, :new_model" SELECT DISTINCT carrier, :Samsung, :Galaxy S5
  • @Rahul 我的理解是该表目前有 6,000 行。他正在尝试为列表中的所有运营商添加新的品牌和型号,但列表中的 4 个除外。
  • @Rahul:没有更新是不正确的。我也认为 OP 期待更新,我回答了。但我删除了我的答案。
  • 是的,会有冗余,我认为没有主键约束。
  • @Barmar,我不想为这 4 个运营商提交查询?如果我只想插入查询表中所有可用的运营商怎么办?
【解决方案2】:

MYSQL iNSERT 语法 - http://dev.mysql.com/doc/refman/5.6/en/insert.html

如果您在谈论 PHP,请查看此页面:http://www.w3schools.com/php/php_mysql_insert.asp

编辑:

可以找到一个好的解决方案here

如果你使用上面的解决方案,结果应该是这样的:

INSERT INTO table ("carrier", "make", "model") 
 SELECT DISTINCT carrier, make, model
 FROM `table2` AS o
 WHERE o.name NOT 
 IN ( "ATT", "bell-mobility", "virgin Canada", "Warranty ATT"  )

【讨论】:

  • 我投了反对票,因为这是一个无用的答案。它没有任何特定于用户问题的信息,只是有关语法的一般信息。
  • 你编辑了你的答案,首先你建议了一个更新,我没有否决你的答案..不是每个人都像你这样“我需要投票”..
  • 我发布了这个答案,因为如您所见,提出这个问题的用户不知道如何使用 Mysql Insert,这就是它如此通用的原因
  • 感谢 Pascut.... 虽然您需要编辑一些更正,因为如果重复的行已经为运营商提供服务,您的查询也会插入重复值
猜你喜欢
  • 1970-01-01
  • 2014-08-24
  • 1970-01-01
  • 2015-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-20
相关资源
最近更新 更多