Возможно ли это сделать в одном запросе? - PullRequest
0 голосов
/ 16 сентября 2011

У вас есть 2 столбца Link, 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, если Status 0 хотя бы для 1 ссылки в этой группе;
для всех ссылок в той же группе, мы заменим NULL на 1, если Status 1по крайней мере, для 1 ссылки в этой группе и нулей нет;
для всех ссылок в той же группе мы заменяем NULL на 2, если Status 2 по крайней мере для 1 ссылки в этой группе и тамнет 0 или 1;
Так что 0 имеет самый высокий приоритет, затем идет 1, затем 2, а NULL имеет самый низкий приоритет.

2) если все статусы NULL для 1 группы, мы ничего не делаем.

В результате база данных 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:// в .com и имеют не менее / символов после .com (это упрощает вопрособ этом запросе).

Можно ли сделать, используя всего 1 запрос?

Чтобы лучше понять вопрос, просто догадайтесь 1 = "Я проверил, этот веб-сайт содержит по крайней мере 1 страницу на английском языке", 2 = "Я проверил, этот веб-сайт содержит по крайней мере 1 страницупо-французски "NULL (по умолчанию) фактически означает" я посещаю 0 страниц на этом сайте ".

Цель состоит в том, чтобы обновить базу данных, используя всего один запрос.

Я бы предположилSELECT Link as currentlink, Status AS currentstatus FROM MyDatabase WHERE Status is NOT NULL можно использовать для выбора тех значений, которые не равны NULL, чтобы обновить остальные значения, но тогда я застрял.

Спасибо.

1 Ответ

1 голос
/ 16 сентября 2011

почему вы не используете UDF (процедуру хранения), чтобы сделать это программно?

Ну, вы можете попытаться сделать это с некоторым ОБНОВЛЕНИЕМ с подстроками и структурами IF / HAVING, но это будет больше временидорого.Реальный способ сделать это - использовать временную таблицу или пользовательский курсор для извлечения строк.Возможно, в качестве последнего варианта, вы можете найти обходной сценарий, чтобы сделать это в запланированное время или с помощью триггера (когда на что-то влияет ... событие).

В любом случае, пожалуйста, скажите мне этовы, способ, который вы ищете, сложнее и дороже, чем правильный способ сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...