数据库Link
中有2列Status
,MyDatabase
。
Link
列包含字符串,值看起来像http://anysite.com/some/more/symbols?...
(varchar(256)
)。
Status
值可以是NULL
(默认情况下)或0
或1
或2
。 (int(2)
)。
如何更新列Status
,以便NULL
或0
或1
使用此规则替换2
:
0)我们根据组的值(同一网站后面的链接,甚至是不同的页面,在同一组中)按组拆分链接列
1)对于同一组中的所有链接,我们将NULL
替换为0
,如果状态0
至少为该组中的1个链接;
对于同一组中的所有链接,我们将NULL
替换为1
,如果状态1
至少为该组中的1个链接且没有零;
对于同一组中的所有链接,如果状态NULL
至少为该组中的1个链接且没有2
或{{1 }};
因此,2
具有最高优先级,然后是0
,然后是1
,0
具有最低优先级。
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
可以用来选择那些非空的值来更新其余的值,但后来我被卡住了。
谢谢。
答案 0 :(得分:1)
为什么不使用UDF(存储过程)以编程方式执行此操作?
好吧,您可以尝试使用子字符串和IF / HAVING结构进行一些UPDATE,但这将花费更多的时间。实现这一点的真正方法是使用临时表或自定义游标来获取行。也许,作为最后一个选项,您可以找到一个解决脚本的工作,以便在计划时间或触发器中执行此操作(当某些事件受到...事件影响时)。
无论如何,请我告诉你,你正在寻找的方式更复杂,时间更长,是正确的方法。