这可以在一个查询中执行吗?

时间:2011-09-16 17:46:41

标签: mysql sql

数据库Link中有2列StatusMyDatabaseLink列包含字符串,值看起来像http://anysite.com/some/more/symbols?...varchar(256))。 Status值可以是NULL(默认情况下)或012。 (int(2))。

如何更新列Status,以便NULL01使用此规则替换2

0)我们根据组的值(同一网站后面的链接,甚至是不同的页面,在同一组中)按组拆分链接列

1)对于同一组中的所有链接,我们将NULL替换为0,如果状态0至少为该组中的1个链接;
对于同一组中的所有链接,我们将NULL替换为1,如果状态1至少为该组中的1个链接且没有零;
对于同一组中的所有链接,如果状态NULL至少为该组中的1个链接且没有2或{{1 }};
因此,2具有最高优先级,然后是0,然后是10具有最低优先级。

2)如果1组的所有状态均为1,我们什么都不做。

结果,数据库2

NULL

应该成为:

NULL

所有链接包含MyDatabase,没有Link Status -------------------------------------- ------ http://stackoverflow.com/question NULL http://google.com/?query=AmIPregnant 2 http://stackoverflow.com/question/ask NULL http://google.com/?query=weather NULL http://google.com/?query=love 1 http://stackoverflow.com/question/abcd NULL ,没有Link Status -------------------------------------- ------ http://stackoverflow.com/question NULL http://google.com/?query=AmIPregnant 1 http://stackoverflow.com/question/ask NULL http://google.com/?query=weather 1 http://google.com/?query=love 1 http://stackoverflow.com/question/abcd NULL 位于http://https://之后至少有ftp://个符号(此是为了简化有关此查询的问题。)

是否可以只使用1个查询?

为了更好地理解这个问题,只需猜测1 =“我已经检查过,这个网站包含至少1页的英文”,2 =“我已经检查过,这个网站包含至少1页法语” ,NULL(默认情况下)实际上意味着“我在这个网站上访问0页”。

目标是仅使用1个查询来更新数据库。

我猜这个.com可以用来选择那些非空的值来更新其余的值,但后来我被卡住了。

谢谢。

1 个答案:

答案 0 :(得分:1)

为什么不使用UDF(存储过程)以编程方式执行此操作?

好吧,您可以尝试使用子字符串和IF / HAVING结构进行一些UPDATE,但这将花费更多的时间。实现这一点的真正方法是使用临时表或自定义游标来获取行。也许,作为最后一个选项,您可以找到一个解决脚本的工作,以便在计划时间或触发器中执行此操作(当某些事件受到...事件影响时)。

无论如何,请我告诉你,你正在寻找的方式更复杂,时间更长,是正确的方法。