Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / SQLite Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Помогите переделать SQL запрос под SQLite  [new]
АртурVan_Kenobi
Member

Откуда:
Сообщений: 16
у меня есть SQL с Full, но в SQLite есть только Left, помогите переделать запрос
/////
(@"
SELECT Sheta.Id, Karandash.opisanie_karandash, Karandash.artikul_karandash, Profil.artikul_profil, Profil.system, Profil.tip, Profil.opis, Profil.width_kom, Profil.width_street, Profil.length, Profil.height, Izd_karandash.kol,
Izd_karandash.sum, Izd.kol AS Expr1, Izd.price_s_proc, Izd.prim, Izd.shirina, Izd.date, Izd.squre, Izd.length AS Expr2, Plenka.name_plenka, Plenka_1.name_plenka AS Expr3, Klient.name_klient, Izd.No_izd, Sheta.N_K_S
FROM Sheta INNER JOIN
Klient ON Sheta.id_K = Klient.Id_klient FULL OUTER JOIN
Karandash INNER JOIN
Izd_karandash ON Karandash.Id_karandash = Izd_karandash.id_karandash ON Sheta.Id = Izd_karandash.id_schet FULL OUTER JOIN
Plenka INNER JOIN
Profil INNER JOIN
Izd ON Profil.Id_profil = Izd.id_profil INNER JOIN
Plenka AS Plenka_1 ON Izd.id_plenka_komnata = Plenka_1.Id_plenka ON Plenka.Id_plenka = Izd.id_plenka_street ON Sheta.Id = Izd.id_schet
WHERE (Sheta.id IN ({0}))", m);
/////
22 окт 18, 09:35    [21710716]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
Dima T
Member

Откуда:
Сообщений: 14031
Сделай как в документации предлагают SQLite FULL OUTER JOIN Emulation
22 окт 18, 09:40    [21710723]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
АртурVan_Kenobi
Member

Откуда:
Сообщений: 16
Dima T,
один Full могу заменить, но в таком запросе уже путаюсь, был бы очень благодарен, если бы мой запрос переделали под sqlite или может пример с несколькими Union у Вас есть
22 окт 18, 09:59    [21710748]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
Dima T
Member

Откуда:
Сообщений: 14031
Для начала надо запрос "причесать", т.к. в исходном виде мозг взрывается при попытке понять что там написано.
Навел красоту, проверь что этот запрос так же работает как исходный:
SELECT Sheta.Id, Karandash.opisanie_karandash, Karandash.artikul_karandash, Profil.artikul_profil, Profil.system 
                , Profil.tip, Profil.opis, Profil.width_kom, Profil.width_street, Profil.length, Profil.height, Izd_karandash.kol
                , Izd_karandash.sum, Izd.kol AS Expr1, Izd.price_s_proc, Izd.prim, Izd.shirina, Izd.date, Izd.squre, Izd.length AS Expr2
                , Plenka.name_plenka, Plenka_1.name_plenka AS Expr3, Klient.name_klient, Izd.No_izd, Sheta.N_K_S
        FROM Sheta INNER JOIN Klient ON Sheta.id_K = Klient.Id_klient 
                   INNER JOIN Izd_karandash  ON Sheta.Id = Izd_karandash.id_schet
                       FULL OUTER JOIN Karandash ON Karandash.Id_karandash = Izd_karandash.id_karandash 
                   INNER JOIN Izd ON Sheta.Id = Izd.id_schet
                       INNER JOIN Profil ON Profil.Id_profil = Izd.id_profil 
                       FULL OUTER JOIN Plenka ON Plenka.Id_plenka = Izd.id_plenka_street
                       INNER JOIN Plenka AS Plenka_1 ON Izd.id_plenka_komnata = Plenka_1.Id_plenka 
        WHERE (Sheta.id IN ({0}))

Если все нормально, то будем дальше думать как FULL JOIN заменить
22 окт 18, 10:19    [21710774]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
АртурVan_Kenobi
Member

Откуда:
Сообщений: 16
Dima T, пока проверить не могу, но думаю да все правильно
22 окт 18, 10:55    [21710802]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
ShSerge
Member

Откуда: ʚонɔ dиw
Сообщений: 24853
АртурVan_Kenobi
Dima T, пока проверить не могу, но думаю да все правильно

Никогда не пишите фулл джойн. Не надо. За тридцать лет программирования на SQL никогда не писал.
22 окт 18, 18:53    [21711598]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
Dima T
Member

Откуда:
Сообщений: 14031
АртурVan_Kenobi
Dima T, пока проверить не могу, но думаю да все правильно

ИМХО выкинуть эти две таблицы из запроса и результат во временную таблицу. Затем ее FULL JOIN с первой таблицей во вторую временную, затем вторую FULL JOIN со второй. Под FULL JOIN подразумевал это 21710723
22 окт 18, 20:07    [21711649]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
Dima T
Member

Откуда:
Сообщений: 14031
ShSerge
АртурVan_Kenobi
Dima T, пока проверить не могу, но думаю да все правильно

Никогда не пишите фулл джойн. Не надо. За тридцать лет программирования на SQL никогда не писал.

Верно подмечено, повод пересмотреть написанное. Я тоже никогда не писал FULL JOIN
22 окт 18, 20:09    [21711652]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
АртурVan_Kenobi
Member

Откуда:
Сообщений: 16
Dima T,можете показать на примере? я с временными таблицами не имел дел
23 окт 18, 07:21    [21711815]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
Dima T
Member

Откуда:
Сообщений: 14031
АртурVan_Kenobi
Dima T,можете показать на примере? я с временными таблицами не имел дел

Для создания временной таблицы create temp table ...
create temp table T1 as
   SELECT Sheta.Id, Karandash.opisanie_karandash, Karandash.artikul_karandash, Profil.artikul_profil, Profil.system 
                , Profil.tip, Profil.opis, Profil.width_kom, Profil.width_street, Profil.length, Profil.height, Izd_karandash.kol
                , Izd_karandash.sum, Izd.kol AS Expr1, Izd.price_s_proc, Izd.prim, Izd.shirina, Izd.date, Izd.squre, Izd.length AS Expr2
                , Plenka.name_plenka, Plenka_1.name_plenka AS Expr3, Klient.name_klient, Izd.No_izd, Sheta.N_K_S
        FROM Sheta INNER JOIN Klient ON Sheta.id_K = Klient.Id_klient 
                   INNER JOIN Izd_karandash  ON Sheta.Id = Izd_karandash.id_schet
                       FULL OUTER JOIN Karandash ON Karandash.Id_karandash = Izd_karandash.id_karandash 
                   INNER JOIN Izd ON Sheta.Id = Izd.id_schet
                       INNER JOIN Profil ON Profil.Id_profil = Izd.id_profil 
                       FULL OUTER JOIN Plenka ON Plenka.Id_plenka = Izd.id_plenka_street
                       INNER JOIN Plenka AS Plenka_1 ON Izd.id_plenka_komnata = Plenka_1.Id_plenka 
        WHERE (Sheta.id IN ({0}))

Будет создана таблица T1 доступная только тому кто ее создал. Выделенное красным убери из запроса.
Затем
create temp table T2 as
  select T1.*, Karandash.opisanie_karandash, Karandash.artikul_karandash
      from T1 left join Karandash on Karandash.Id_karandash = T1.id_karandash
 union all
  select T1.*, Karandash.opisanie_karandash, Karandash.artikul_karandash
      from Karandash left join T1 on Karandash.Id_karandash = T1.id_karandash
      where T1.id_karandash is NULL

затем также T2 и Plenka

В конце удали временные
drop table T1;
drop table T2;
23 окт 18, 07:56    [21711836]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
АртурVan_Kenobi
Member

Откуда:
Сообщений: 16
Dima T,
Хорошо, спасибо большое, сейчас попробую
23 окт 18, 08:58    [21711879]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
АртурVan_Kenobi
Member

Откуда:
Сообщений: 16
Dima T,я правильно написал? VS написало что у меня возле ON синтаксическая ошибка
Create temp table T1 as 
Select Sheta.Id,Profil.artikul_profil, Profil.system, Profil.tip, Profil.opis, Profil.width_kom, Profil.width_street, Profil.length, Profil.height, Izd_karandash.kol, 
Izd_karandash.sum, Izd.kol AS Expr1, Izd.price_s_proc, Izd.prim, Izd.shirina, Izd.date, Izd.squre, Izd.length AS Expr2, Plenka.name_plenka, Plenka_1.name_plenka AS Expr3, Klient.name_klient, Izd.No_izd, Sheta.N_K_S 
FROM Sheta INNER JOIN Klient ON Sheta.id_K = Klient.Id_klient 
INNER JOIN Izd_Karandash ON Sheta.Id = Izd_karandash.id_schet 
INNER JOIN Izd ON Sheta.id=Izd.id_schet 
INNER JOIN Profil ON Profil.Id_plenka = Izd.id_profil 
INNER JOIN Plenka AS Plenka_1 ON Izd.id_plenka_komnata = Plenka_1.Id_plenka ON Plenka.Id_plenka = Izd.id_plenka_street ON Sheta.Id = Izd.id_schet 
WHERE (Sheta.id IN ({0})) 

Create temp table T2 as 
Select T1.*,Karandash.opisanie_karandash,Karandash.artikul_karandash 
from T1 left join Karandash on Karandash.Id_karandash =T1.id_karandash 
union all 
Select T1.*,Karandash.opisanie_karandash,Karandash.artikul_karandash 
from Karandash left join T1 on Karandash.Id_karandash = T1.id_karandash 
where T1.id_karandash is NULL 

Create temp table T3 as 
Select T1.*,Plenka.* 
from T1 left join Plenka on Plenka.Id_plenka = T1.id_plenka_street 
union all 
Select T1.*,Plenka.* 
from Plenka left join T1 on Plenka.Id_plenka = T1.id_plenka_street 
where T1.id_plenka_street is NULL 

drop table T1;
drop table T2;
drop table T3;
", m);
23 окт 18, 12:52    [21712217]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
Dima T
Member

Откуда:
Сообщений: 14031
1. После каждого запроса надо ;
2. "Create temp table T3 as" не надо. Это результат, там просто SELECT ...
23 окт 18, 13:51    [21712319]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
Dima T
Member

Откуда:
Сообщений: 14031
3. "drop table T3;" тоже не надо
23 окт 18, 13:52    [21712322]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
АртурVan_Kenobi
Member

Откуда:
Сообщений: 16
Dima T, Все равно ошибка "Sqlite error near "ON":syntax error"
23 окт 18, 14:04    [21712344]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
Dima T
Member

Откуда:
Сообщений: 14031
Ты какой запрос взял? В причесаном 21710774 этого не было
ON Plenka.Id_plenka = Izd.id_plenka_street ON Sheta.Id = Izd.id_schet
23 окт 18, 14:07    [21712348]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
АртурVan_Kenobi
Member

Откуда:
Сообщений: 16
Dima T,запускается без ошибок, но в отчет ничего не выходит, в параметр m значение поступают
23 окт 18, 14:42    [21712382]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
Dima T
Member

Откуда:
Сообщений: 14031
Это убрал?
...
Create temp table T3 as 
...
drop table T3;
23 окт 18, 14:44    [21712388]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
АртурVan_Kenobi
Member

Откуда:
Сообщений: 16
Dima T,
да, убрал
23 окт 18, 14:49    [21712393]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
АртурVan_Kenobi
Member

Откуда:
Сообщений: 16
Dima T, сейчас вот такой запрос у меня
(@" 
Create temp table T1 as 
Select Sheta.Id,Profil.artikul_profil, Profil.system, Profil.tip, Profil.opis, Profil.width_kom, Profil.width_street, Profil.length, Profil.height, Izd_karandash.kol, 
Izd_karandash.sum,Izd_karandash.id_karandash,Izd.id_plenka_street, Izd.kol AS Expr1, Izd.price_s_proc, Izd.prim, Izd.shirina, Izd.date, Izd.squre, Izd.length AS Expr2, Plenka_1.name_plenka AS Expr3, Klient.name_klient, Izd.No_izd, Sheta.N_K_S 
FROM Sheta INNER JOIN Klient ON Sheta.id_K = Klient.Id_klient 
INNER JOIN Izd_Karandash ON Sheta.Id = Izd_karandash.id_schet 
INNER JOIN Izd ON Sheta.id=Izd.id_schet 
INNER JOIN Profil ON Profil.Id_profil = Izd.id_profil 
INNER JOIN Plenka AS Plenka_1 ON Izd.id_plenka_komnata=Plenka_1.Id_plenka 
WHERE (Sheta.id IN ({0})); 

Create temp table T2 as 
Select T1.*,Karandash.opisanie_karandash,Karandash.artikul_karandash 
from T1 left join Karandash ON Karandash.Id_karandash =T1.id_karandash 
union all 
Select T1.*,Karandash.opisanie_karandash,Karandash.artikul_karandash 
from Karandash left join T1 ON Karandash.Id_karandash = T1.id_karandash 
where T1.id_karandash is NULL; 


drop table T1; 
drop table T2; 
", m);
23 окт 18, 14:54    [21712395]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
Dima T
Member

Откуда:
Сообщений: 14031
Надо было только 2 строки убрать. И в запросе использовать T2
(@" 
Create temp table T1 as 
Select Sheta.Id,Profil.artikul_profil, Profil.system, Profil.tip, Profil.opis, Profil.width_kom, Profil.width_street, Profil.length, Profil.height, Izd_karandash.kol, 
Izd_karandash.sum,Izd_karandash.id_karandash,Izd.id_plenka_street, Izd.kol AS Expr1, Izd.price_s_proc, Izd.prim, Izd.shirina, Izd.date, Izd.squre, Izd.length AS Expr2, Plenka_1.name_plenka AS Expr3, Klient.name_klient, Izd.No_izd, Sheta.N_K_S 
FROM Sheta INNER JOIN Klient ON Sheta.id_K = Klient.Id_klient 
INNER JOIN Izd_Karandash ON Sheta.Id = Izd_karandash.id_schet 
INNER JOIN Izd ON Sheta.id=Izd.id_schet 
INNER JOIN Profil ON Profil.Id_profil = Izd.id_profil 
INNER JOIN Plenka AS Plenka_1 ON Izd.id_plenka_komnata=Plenka_1.Id_plenka 
WHERE (Sheta.id IN ({0})); 

Create temp table T2 as 
Select T1.*,Karandash.opisanie_karandash,Karandash.artikul_karandash 
from T1 left join Karandash ON Karandash.Id_karandash =T1.id_karandash 
union all 
Select T1.*,Karandash.opisanie_karandash,Karandash.artikul_karandash 
from Karandash left join T1 ON Karandash.Id_karandash = T1.id_karandash 
where T1.id_karandash is NULL; 

Select T2.*,Plenka.* 
from T2 left join Plenka on Plenka.Id_plenka = T2.id_plenka_street 
union all 
Select T2.*,Plenka.* 
from Plenka left join T2 on Plenka.Id_plenka = T2.id_plenka_street 
where T2.id_plenka_street is NULL 

drop table T1; 
drop table T2; 
", m);
23 окт 18, 15:08    [21712406]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
Dima T
Member

Откуда:
Сообщений: 14031
и ; добавь
...
where T2.id_plenka_street is NULL ;
23 окт 18, 15:10    [21712409]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
АртурVan_Kenobi
Member

Откуда:
Сообщений: 16
Dima T, изначально так и сделал, но вышла ошибкеа "A table in the database is locked"
23 окт 18, 15:14    [21712419]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
Dima T
Member

Откуда:
Сообщений: 14031
Странно. Попробуй так
(@" 
Create temp table T1 as 
Select Sheta.Id,Profil.artikul_profil, Profil.system, Profil.tip, Profil.opis, Profil.width_kom, Profil.width_street, Profil.length, Profil.height, Izd_karandash.kol, 
Izd_karandash.sum,Izd_karandash.id_karandash,Izd.id_plenka_street, Izd.kol AS Expr1, Izd.price_s_proc, Izd.prim, Izd.shirina, Izd.date, Izd.squre, Izd.length AS Expr2, Plenka_1.name_plenka AS Expr3, Klient.name_klient, Izd.No_izd, Sheta.N_K_S 
FROM Sheta INNER JOIN Klient ON Sheta.id_K = Klient.Id_klient 
INNER JOIN Izd_Karandash ON Sheta.Id = Izd_karandash.id_schet 
INNER JOIN Izd ON Sheta.id=Izd.id_schet 
INNER JOIN Profil ON Profil.Id_profil = Izd.id_profil 
INNER JOIN Plenka AS Plenka_1 ON Izd.id_plenka_komnata=Plenka_1.Id_plenka 
WHERE (Sheta.id IN ({0})); 

Create temp table T2 as 
Select T1.*,Karandash.opisanie_karandash,Karandash.artikul_karandash 
from T1 left join Karandash ON Karandash.Id_karandash =T1.id_karandash 
union all 
Select T1.*,Karandash.opisanie_karandash,Karandash.artikul_karandash 
from Karandash left join T1 ON Karandash.Id_karandash = T1.id_karandash 
where T1.id_karandash is NULL; 

Create temp table T3 as 
Select T2.*,Plenka.* 
from T2 left join Plenka on Plenka.Id_plenka = T2.id_plenka_street 
union all 
Select T2.*,Plenka.* 
from Plenka left join T2 on Plenka.Id_plenka = T2.id_plenka_street 
where T2.id_plenka_street is NULL;

select * from T3;

drop table T1; 
drop table T2; 
drop table T3; 
", m);
23 окт 18, 15:38    [21712457]     Ответить | Цитировать Сообщить модератору
 Re: Помогите переделать SQL запрос под SQLite  [new]
АртурVan_Kenobi
Member

Откуда:
Сообщений: 16
Dima T, Все равно та же ошибка
23 окт 18, 15:50    [21712466]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / SQLite Ответить