我有一个db表结构,下面给出大约6000行:。

carrier|make|model
.

我的需要是创建一个SQL查询,这样我就可以为所有运营商插入一个制作模型对,除了少数人(比例ATT,Bell-Mobility,Virgin Canada和保修ATT)。

如何完成此操作?

有帮助吗?

解决方案

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
.

btw,这个问题表明您的数据库设计差。您应该有一台运营商表列出了您所知道的所有运营商,您不应该从列出每个运营商的表和模型的表中获取它。这是一个糟糕的正常化的一个例子,因为如果您停止为某些运营商提供电话,您将完全忘记它们存在。

其他提示

mysql instry语法 - http://dev.mysql.com/doc/refman/5.6/en/orsert.html

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

编辑:

可以找到一个好的解决方案在这里

如果您使用上述解决方案,结果应该是:

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"  )
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top