2015-02-06 33 views
-2

,所以我有这样的代码SQL MATCH LIKE,使ID彼此相等

SELECT NAME, ingredient_id 
FROM ingredient_aliases 
WHERE (NAME) LIKE '%WATER%' 

它显示了我所有的类似名称的水

enter image description here

从上图中,所有三个是水。

我有很多水的名称与成分_id。 有没有一种方法可以让他们的ingredient_id彼此相等?

如果您需要更多信息,请告诉我。 谢谢!

+2

目前还不清楚你在做什么后,你的问题中的样本数据如何以期望的结果? – 2015-02-06 17:37:55

+1

您使用的是什么RDBMS? MySQL,SQL-Server,Oracle等?根据数据库有不同的方法来做到这一点。 – Barmar 2015-02-06 17:46:10

+0

@Barmar即时通讯使用MySQL,是否有任何命令像“set ingredient_id equal”在SQL中,我可以使用? – Student 2015-02-06 17:52:24

回答

0

使用子查询从非空行中获取配料ID。然后在所有空行的UPDATE赋值中使用它。

UPDATE ingredient_aliases 
SET a.ingredient_id = 
    (SELECT MAX(ingredient_id) AS max_id 
     FROM ingredient_aliases 
     WHERE name LIKE '%WATER%' 
     AND ingredient_id IS NOT NULL) 
WHERE name LIKE '%WATER%' 
    AND ingredient_id IS NULL 
+0

谢谢!这也工作! – Student 2015-02-06 18:33:03

+0

所以我只是意识到你的方法会更好,因为真正的硬编码ID将是一个真正的痛苦。 但IM在第二行收到错误 15时19分19秒内核错误:错误:语法错误或接近“CROSS” LINE 2:CROSS JOIN为B 你知道如何解决它? – Student 2015-02-06 20:20:41

+0

对不起,这是一个错误的编辑,该行应该被删除。 – Barmar 2015-02-06 20:21:20

0

You want to UPDATE the NULL value to be 666?

@Hart CO yes, exactly

我认为你需要像这样:

UPDATE ingredient_aliases 
SET ingredient_id = 666 
WHERE (NAME) LIKE '%WATER%' AND 
     ingredient_id IS NULL 

我假设ingredient_id是所有水域一样。

+0

这工作完美,谢谢! – Student 2015-02-06 18:17:58

+0

@学生,欢迎你的家伙。我很高兴我的帮助。 – Christos 2015-02-06 18:18:36

+0

@Student如果这个答案适合你,你应该接受它,让其他人有同样的问题知道这个工作,这是这个网站的工作原理。这也是感谢答案作者的好方法。 – 2015-02-06 18:24:11