Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как перевести mssql запрос в mysql ? / 7 сообщений из 7, страница 1 из 1
24.12.2016, 20:29
    #39374520
drkrol
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести mssql запрос в mysql ?
Здравствуйте. Есть вот такой mssql запрос:
PHP:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
declare @start date = '2016-12-12'; -- Новая дата заезда
declare @end date = '2016-12-20'; -- Новая дата выезда
declare @today date = '2016-12-11';
 
update  main
set     numbernomer = null
where   datestart > @today;
 
declare @mainnumber int;
 
while exists (select * from main where numbernomer is null)
begin
 
    select top(1) @mainnumber = id
    from    main
    where   numbernomer is null
    order by datestart asc, datediff(day, datestart, dateend) desc;
 
    update m0
    set     numbernomer = m1.nomer
    from    main m0
            cross apply (SELECT top 1 a.nomer
                        FROM    allnomer a
                                LEFT JOIN main m
                                ON a.nomer = m.numbernomer
                                AND DATEDIFF(day, m.datestart, m0.dateend) * DATEDIFF(day, m.dateend, m0.datestart) <= 0
                                left join (select m2.numbernomer, max(m2.dateend) as dateend from main m2 group by m2.numbernomer) as m2
                                        on a.nomer = m2.numbernomer
                        WHERE a.type = 'lux' AND m.numbernomer IS NULL
                        order by datediff(day, m2.dateend, m0.datestart), a.nomer
                        ) as m1
    where   m0.id = @mainnumber;
 
end;
 
SELECT a.nomer
FROM allnomer a
LEFT JOIN main m
  ON a.nomer = m.numbernomer
  AND DATEDIFF(day, m.datestart, @end) * DATEDIFF(day, m.dateend, @start) <= 0
WHERE a.type = 'lux' AND m.numbernomer IS NULL;


Подскажите пожалуйста, что нужно изменить, чтобы этот запрос работал в mysql? Я, кроме того, что нужно decale на set поменять и тип данных убрать, ничего не знаю.
P.S. Запрос должен будет выполняться в этой таблице: http://sqlfiddle.com/#!9/81225

Модератор: Тема перенесена из форума "Microsoft SQL Server".
...
Рейтинг: 0 / 0
24.12.2016, 23:11
    #39374582
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести mssql запрос в mysql ?
drkrol
Код: sql
1.
cross apply

А что это?

Вообще этот код не имеет прямого перевода в MySQL, т.к. в MySQL нет анонимных процедур.
Если удастся переписать цикл на чистый SQL, то хорошо (это, кстати, еще в MS SQL стоило сделать). Если нет - придется этот код оборачивать в процедуру.
...
Рейтинг: 0 / 0
25.12.2016, 16:06
    #39374796
drkrol
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести mssql запрос в mysql ?
miksoft,
Это что-то типа join) Хотя скорее это, наверно, был риторический вопрос... Косяк у меня здесь только с циклом. Я уже много чего прочёл, но всё без толку. При попытке реализовать - ошибка на ошибке. По факту, запрос должен перераспределять даты бронирования в гостинице. Сейчас брони у меня разбросаны хаотично, а sql запрос должен дефрагментовать эти данные.
...
Рейтинг: 0 / 0
25.12.2016, 17:19
    #39374821
drkrol
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести mssql запрос в mysql ?
До:

После:
...
Рейтинг: 0 / 0
25.12.2016, 17:25
    #39374822
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести mssql запрос в mysql ?
drkrolЭто что-то типа join) Хотя скорее это, наверно, был риторический вопрос...Нет, не риторический. Я и правда не знаю, что такое cross apply.

Проверьте еще функцию DATEDIFF. Она явно отличается от одноименной функции в MySQL.
...
Рейтинг: 0 / 0
26.12.2016, 16:46
    #39375442
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести mssql запрос в mysql ?
miksoftdrkrolЭто что-то типа join) Хотя скорее это, наверно, был риторический вопрос...Нет, не риторический. Я и правда не знаю, что такое cross apply.

Проверьте еще функцию DATEDIFF. Она явно отличается от одноименной функции в MySQL.

cross apply. == CROSS JOIN
...
Рейтинг: 0 / 0
26.12.2016, 17:51
    #39375489
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перевести mssql запрос в mysql ?
MasterZivcross apply. == CROSS JOINВ MySQL JOIN == CROSS JOIN == INNER JOIN
А в MS SQL как?
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как перевести mssql запрос в mysql ? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]