powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите с SQL запросом
43 сообщений из 43, показаны все 2 страниц
Помогите с SQL запросом
    #39492870
grav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется SQL запрос:
Код: sql
1.
2.
3.
4.
select distinct FAM, NAME, OTCH, INNFL,C.NOMINSTOIM from UCHRFL A
left JOIN DOLYAUSTKAPEGRUL C ON C.ID=A.DOLYAUSTKAP
right JOIN SVFLEGRUL B ON B.ID=A.SVFL
where B.GRNDATA='1111111111111'


Если в таблице DOLYAUSTKAPEGRUL нет записей, все хорошо.
Если есть, в результате запроса записи дублируются со значением в поле C.NOMINSTOIM и с NULL В поле C.NOMINSTOIM

Извиняюсь за корявое объяснение.
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39492891
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
left и right сознательно использованы?
или "так вышло" ?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39492905
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grav,

Поставь условие C.NOMINSTOIM is not null. Если есть записи с null и без, то обе записи и отображаются. Что Вы хотите видеть в итоге?
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39492908
grav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящийleft и right сознательно использованы?
или "так вышло" ?

right сознательно, в таблице SVFLEGRUL записи обязательно должны быть.
А вот в таблице DOLYAUSTKAPEGRUL могут быть, а могут и не быть.
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39492909
grav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXI,
Хочу видеть ФИО не зависимо от того, есть в таблице DOLYAUSTKAPEGRUL записи или нет.
Но если они есть, не хочу видеть ФИО два раза, с пустым полем NOMINSTOIM и не пустым.
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39492911
grav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXI,
мне нужно, что бы и C.NOMINSTOIM = NULL отображались, если в таблице нет записей.
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39492919
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
21.07.2017 12:16, grav пишет:
> right сознательно, в таблице SVFLEGRUL записи обязательно должны быть.

это не сознательно.
это "так вышло".
в противном случае был бы INNER JOIN.
Код: sql
1.
2.
3.
4.
5.
SELECT ...
  FROM UCHRFL A
  JOIN SVFLEGRUL B ON B.ID=A.SVFL
  LEFT JOIN DOLYAUSTKAPEGRUL C ON C.ID=A.DOLYAUSTKAP
WHERE ...


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39492936
grav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий,

изначально был INNER, но для DOLYAUSTKAPEGRUL, пользователи пожаловались, что учредители есть, но не отражаются.
Я не задумываясь поставил left для DOLYAUSTKAPEGRUL.

В общем осознал. Спасибо! Работает.
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39492940
grav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет, поторопился. Все также.
Если записей нет в DOLYAUSTKAPEGRUL - все корректно.
Если есть, то ФИО по два раза.
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39492942
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
21.07.2017 12:57, grav пишет:
> Я не задумываясь поставил left для DOLYAUSTKAPEGRUL.

LEFT ты поставил правильно, а вот с RIGHT начал "шаманить".
азбука для начинающих примерно такова:
LEFT нужно размещать в самом конце, после INNER-ов.
а не в середине, как у тебя.

по крайней мере до тех пор, пока не придёт понимание
того как эта вся машинерия работает и кто с кем как джойнится.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39492948
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
21.07.2017 13:03, grav пишет:
> Если записей нет в DOLYAUSTKAPEGRUL - все корректно.
> Если есть, то ФИО по два раза.

значит у тебя в DOLYAUSTKAPEGRUL 2 записи, отвечающие условию C.ID=A.DOLYAUSTKAP
выведи их целиком и посмотри в чем отличие.
найди нужную и отсеки лишние.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39492959
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gravKreatorXXI,
мне нужно, что бы и C.NOMINSTOIM = NULL отображались, если в таблице нет записей.
Если уберёшь из запроса C.NOMINSTOIM, то будет как надо. Если нужно и C.NOMINSTOIM видеть, то distinct убери и попробуй поэкспериментировать с group by.
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39492986
grav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящийзначит у тебя в DOLYAUSTKAPEGRUL 2 записи, отвечающие условию C.ID=A.DOLYAUSTKAP

точно, две. Одна с C.NOMINSTOIM = NULL
Это еще хуже :(
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39492991
grav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем вот такая фигня получается. Нижние 4 записи правильные.
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39492992
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
21.07.2017 14:40, grav пишет:
> Автор: grav. Мимопроходящий
> значит у тебя в DOLYAUSTKAPEGRUL 2 записи, отвечающие условию C.ID=A.DOLYAUSTKAP
>
>
> точно, две. Одна с C.NOMINSTOIM = NULL
> Это еще хуже :(

ну так и отсекай их
Код: sql
\r\n...\r\nLEFT JOIN DOLYAUSTKAPEGRUL C ON C.ID=A.DOLYAUSTKAP AND C.NOMINSTOIM IS NOT NULL\r\n
\r\n

зы: и выясни, каким макаром (и занафига?!) такие записи попадают в эту таблицу.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39493002
grav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий,

Не могу отсекать, многие действительно с NOMINSTOIM = NULL, они нужны.
Надо выяснять откуда взялись задвоения в базе и какие из них правильные
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39493006
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
21.07.2017 15:15, grav пишет:
> Не могу отсекать, многие действительно с NOMINSTOIM = NULL, они нужны.

если ты НЕ селектишь из этой таблицы другие поля, кроме NOMINSTOIM,
то всё будет Ок.

> Надо выяснять откуда взялись задвоения в базе и какие из них правильные

вот это самое верное решение.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39493013
grav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий
если ты НЕ селектишь из этой таблицы другие поля, кроме NOMINSTOIM,
то всё будет Ок.


Вот этот результат запроса корректный. А если выставитьC.NOMINSTOIM IS NOT NULL будет нулевой результат
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39493019
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
21.07.2017 15:37, grav пишет:
> будет нулевой результат

моя твоя не понимай.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39493020
grav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящиймоя твоя не понимай.

На картинке правильный результат выполнения запроса.
Нельзя добавить, результат неверный будет
Код: sql
1.
LEFT JOIN DOLYAUSTKAPEGRUL C ON C.ID=A.DOLYAUSTKAP AND C.NOMINSTOIM IS NOT NULL
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39493022
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
21.07.2017 15:49, grav пишет:
> результат неверный будет

какой?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39493037
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grav,

укажи алиасы таблиц у всех столбцов, и добавь в выборку столбцы-идентфикаторы всех связей. Тогда ты увидишь, для записей из каких таблиц лезут дубли.

для исходного запроса (в первом сообщении) это

Код: sql
1.
2.
3.
4.
5.
select distinct A.FAM, A.NAME, A.OTCH, A.INNFL,C.NOMINSTOIM,
A.DOLYAUSTKAP, C.ID, B.ID, A.SVFL from UCHRFL A
left JOIN DOLYAUSTKAPEGRUL C ON C.ID=A.DOLYAUSTKAP
right JOIN SVFLEGRUL B ON B.ID=A.SVFL
where B.GRNDATA='1111111111111'
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39493047
grav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий21.07.2017 15:49, grav пишет:
> результат неверный будет

какой?

Нулевой. Записи запрос не вернет.
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39493049
grav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv,

Я так и сделал, результат на первой картинке. Откуда дубли ясно. Почему они есть в таблице не ясно, разбираюсь.
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39493050
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
21.07.2017 16:19, grav пишет:
> Нулевой. Записи запрос не вернет.

чот ты гонишь братец-кролик...
нуко, скопируй сюда текст запроса и результат.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39493053
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gravМимопроходящийесли ты НЕ селектишь из этой таблицы другие поля, кроме NOMINSTOIM,
то всё будет Ок.


Вот этот результат запроса корректный. А если выставитьC.NOMINSTOIM IS NOT NULL будет нулевой результат
Понятно, здесь же нет записей not null. Неясно изначально, что надо получить?
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39493054
grav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий21.07.2017 16:19, grav пишет:
> Нулевой. Записи запрос не вернет.

чот ты гонишь братец-кролик...
нуко, скопируй сюда текст запроса и результат.

ну я не проверял, предположил только :) Сейчас проверю
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39493055
grav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий21.07.2017 16:19, grav пишет:
> Нулевой. Записи запрос не вернет.

чот ты гонишь братец-кролик...
нуко, скопируй сюда текст запроса и результат.


Вот запрос и результат. Объяснить результаты себе не могу
Код: sql
1.
2.
3.
4.
select distinct FAM, NAME, OTCH, INNFL,C.NOMINSTOIM from SVFLEGRUL B
JOIN UCHRFL A ON A.SVFL=B.ID
left JOIN DOLYAUSTKAPEGRUL C ON C.ID=A.DOLYAUSTKAP AND C.NOMINSTOIM IS NOT NULL
where B.GRNDATA='111111111111'
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39493056
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grav,

Убери из запроса поле C.NOMINSTOIM. И будет счастье.
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39493059
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
21.07.2017 16:40, KreatorXXI пишет:
>
> Убери из запроса поле C.NOMINSTOIM. И будет счастье.

не будет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39493060
grav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXIgrav,

Убери из запроса поле C.NOMINSTOIM. И будет счастье.
Дык оно нада :)
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39493061
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

между прочим, приводимый ТС результат не относится к приводимому им запросу. У него 5 полей селектится.
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39493063
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
21.07.2017 16:44, KreatorXXI пишет:
> между прочим, приводимый ТС результат не относится к приводимому им запросу. У него 5 полей селектится.

угу.
но клиент попался упорный...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39493064
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grav,

а что надо? Что должно быть в результате? Можно озвучить-то?
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39493065
grav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXIМимопроходящий,

между прочим, приводимый ТС результат не относится к приводимому им запросу. У него 5 полей селектится.
Я их вырезал. Персональные данные. Там ИНН и Фамилия еще.
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39493071
grav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KreatorXXIgrav,

а что надо? Что должно быть в результате? Можно озвучить-то?

Должны быть 4 последние записи. Но это запросом не решишь похоже, потому что причина в базе (таблице).
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39493072
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grav,

OK. Вырезанные поля одинаковы для одинаковых людей? Различие только в C.NOMINSTOIM? Если да, то просто это поле вообще убираешь из рассмотрения. И всё.
Другой вопрос - откуда вообще задвоения?
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39493073
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grav,

приводишь совсем другой запрос. Для этого запроса убери distinct и поставь условие C.NOMINSTOIM is not null.
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39493076
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CREATE TABLE T1 (ID  INTEGER);


CREATE TABLE T2 (ID  INTEGER,
                 V   INTEGER);

COMMIT WORK;

INSERT INTO T1 (ID) VALUES (1);
INSERT INTO T1 (ID) VALUES (2);
INSERT INTO T1 (ID) VALUES (3);
INSERT INTO T1 (ID) VALUES (4);

COMMIT WORK;

INSERT INTO T2 (ID, V) VALUES (1, NULL);
INSERT INTO T2 (ID, V) VALUES (1, 10);
INSERT INTO T2 (ID, V) VALUES (2, 20);
INSERT INTO T2 (ID, V) VALUES (3, 30);

COMMIT WORK;


делаем запрос:
Код: sql
1.
2.
3.
SELECT T1.*, T2.V
FROM T1
LEFT JOIN T2 ON (T2.id=T1.id) AND (T2.V IS NOT NULL )


результат:
IDV1102203304NULL

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39493177
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gravДолжны быть 4 последние записи. Но это запросом не решишь похоже, потому что причина в базе (таблице).
Там же LEFT JOIN стоит. Как я понимаю, условие "IS NOT NULL" выполняется, и в таблице C записей не находится, поэтому по правилу LEFT JOIN он вместо них подставляет NULL'ы (не из записей, а по-дефолту). Разве нет?
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39493287
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpgravДолжны быть 4 последние записи. Но это запросом не решишь похоже, потому что причина в базе (таблице).
Там же LEFT JOIN стоит. Как я понимаю, условие "IS NOT NULL" выполняется, и в таблице C записей не находится, поэтому по правилу LEFT JOIN он вместо них подставляет NULL'ы (не из записей, а по-дефолту). Разве нет?
Да. Но дело не в этом. У ТС в таблице C задвоенные записи. И как-бы видеть две записи он не хочет.
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39493288
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI У ТС в таблице C задвоенные записи. И как-бы видеть две записи он не хочет.
А если тогда простой JOIN?
...
Рейтинг: 0 / 0
Помогите с SQL запросом
    #39493299
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

join - это отдельная песня. Просто пока непонятно, что нужно получить. Во всяком случае мне. Варианты предложили. Работающие.
...
Рейтинг: 0 / 0
43 сообщений из 43, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите с SQL запросом
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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