mysql IFNULL INSERT巨大挫折?

时间:2011-08-31 16:02:35

标签: mysql sql ifnull

我对某些mysql有点问题。我会尝试尽可能多的背景。在这种情况下,我为我父母的植物苗圃创建了一个可用性,并将植物信息存储在mysql中,我第一次做了一个糟糕的工作,现在我用同时获得的新知识重做它。 / p>

问题的背景,我在旧数据库中有2个表,其中一个名为Gallery,其中包含以下字段:

idPlant_id_1Plant_id_2Plant_id_3Plant_id_4Plant_id_5Image1,{{1} },Image1_CopyrightImage2Image2_CopyrightScientificCommonCategoryHeightSpreadExposureZone)。

Descp字段将是第二个表的Plant_id_1...,其名称为id,其中包含以下字段:

Availabilityidnamesizedescriptionavailableupcomming

因为你可以看到我对数据库一无所知(仍然可能没有),但对表的新结构一无所知,第2个表再次被称为price,其中包含以下字段:

plantsidscientific_namecommon_namecategoryheightspread,{{1} },exposureusdadescriptionimage1_urlimage1_copyright

第二个被称为image2_url,其中包含以下字段:

image2_copyrightcurrentidplant_idsizeavailableupcoming

price将是description表中相应工厂的ID。

现在问题。我需要从旧表中获取数据并将其放入新表中。我在新的plant_id表中拥有来自画廊的所有植物都没有问题。但现在要将plant放入plant表。

这是导出Availability的例子(我占据了前3名):

Current

我需要从工厂表中获取Availability并将其放入插入语句中,我相信我对此有以下内容:

INSERT INTO `Availability` (`id`, `name`, `size`, `description`,`available`, `upcomming`, `price`) VALUES(91, 'Acer P.''Shishigashira''', ' #5', '30-36"', 27, 0, 36.00); 

INSERT INTO `Availability` (`id`, `name`, `size`, `description`, `available`,`upcomming`, `price`) VALUES(697, 'Arbutus U. ''Compacta''', ' #5','', 0, 0, 16.20); 

INSERT INTO `Availability` (`id`, `name`, `size`, `description`, `available`, `upcomming`, `price`) VALUES(90, 'Acer P.''Shigitatsusawa''', '#15', '', 0, 0, 65.00);

但是现在我遇到了一个新问题,如果plant_id表中没有工厂要匹配,那么我需要一个ifnull。创建具有科学名称的植物,其余为null。好吧,我是SQL的新手,所以这就是我所拥有的,而且它不起作用:

INSERT INTO `current` (`plant_id`, `size`,`description`, `available`, `upcoming`, `price`) VALUES(
(SELECT  `id` 
FROM  `plants` 
WHERE  `scientific_name` 
REGEXP  'Acer P.+ ''Shishigashira'''),  ' #5', '30-36"', 27, 0, 36.00);

正如你所看到的那样,如果你认为自己能够接受挑战,我会非常感激,我会非常感激。如果没有人可以帮助我,我将不得不手动将所有数据重新输入plant表。

1 个答案:

答案 0 :(得分:0)

您应该选择一个返回您需要插入新表的数据的选择。一旦 你可以将它简单地包装到INSERT INTO - SELECT构造中。这样您就不必导出并进行单独插入。您可以一次性复制整个设置。

如果你确保当你将植物从画廊复制到植物表中时,id保持不变,我希望像这样的选择应该返回你想要插入的行:

SELECT 
   Gallery.id as plant_id, 
   Availability.size, 
   Availability.available, 
   Availability.upcoming, 
   Availability.price,
   Availability.description
FROM Gallery 
INNER JOIN Availability
ON Gallery.Plant_id1 = Availability.id

然后你可以在你改变

的地方做同样的事情5次
ON Gallery.Plant_id1 = Availability.id

到(逐一)

ON Gallery.Plant_id2 = Availability.id
ON Gallery.Plant_id3 = Availability.id
ON Gallery.Plant_id4 = Availability.id
ON Gallery.Plant_id5 = Availability.id

或者你把它们全部放在一个巨大的sql语句中,每个select

之间都有一个UNION ALL