Странное выполнение SQL запроса

6yrop

Вот такой запрос

SELECT
A,
B,
C
FROM
(сложное выражение)

выдает 36 строк, а такой

SELECT
A,
B/*,
C*/
FROM
(сложное выражение)

выдает 6 строк.
Это явная бага PostgreSQL?

6yrop

а кто-то пытался PostgreSQL противопоставить MS SQL Server-у

6yrop

а Net provider к PotgreSQL это вообще пиздец. Кто-то говорил, что из-за open source программеры не пишут явной фигни. Посмотрев исходники Net provider, я что-то этого не увидел. Написана откровенная лажа, пришлось фиксить самому.

shlyumper

Подробнее опиши запросы и исходные данные. Пока у тебя слишком абстрактный вопрос.

shlyumper

Под postgresql их вообще-то два. Один - npgsql, вроде как "официальный" провайдер от Mono - действительно страшная параша. Второй - pgsqlclient, работает замечательно.

6yrop

А разве приведенные выражения не явно указывают на баг?

shlyumper

нет. Что тебе кажется странным?

6yrop

полные запросы выглядят громоздко, к тому же там еще и вьюшки используются

shlyumper

"Помогите мне, у меня там хуйня, только где я вам не скажу, вы сами отгадайте". Так что ли?

6yrop

как то, что указано между SELECT и FROM, может влиять на количество строк результата? (имхо, я чего то не догоняю?)

rosali

как то, что указано между SELECT и FROM, может влиять на количество строк результата
Ну во-первых, select distinct x
Во-вторых, group by 1
В-третьих, having
Наверное что-то еще есть, давай уже пиши свой запрос

shlyumper

ну, например, вот так:
create table a (a integer);
create table b (b integer);
insert into a values(1);
insert into a values(2);
insert into a values(3);
insert into b values(1);
insert into b values(2);
insert into b values(3);
=> select a.* from a;
a
---
1
2
3
(записей: 3)
=> select a.*, b.* from a;
NOTICE: добавление отсутствующей записи о FROM-выражении для таблицы "b"
a | b
---+---
1 | 1
1 | 2
1 | 3
2 | 1
2 | 2
2 | 3
3 | 1
3 | 2
3 | 3
(записей: 9)

6yrop

это
select a.*, b.* from a;
проходит разбор?

bastii

group by 1
А так можно?

shlyumper

да. при этом вылезает notice, но если ты выполняешь этот запрос через клиента, который notice игнорирует, то ты его вообще никак не заметишь.

6yrop

SELECT
V1.*,
V2.*
FROM
V1 INNER JOIN V2 ON V1... = V2...
WHERE V2... = 'test1'
V1 и V2 вьюшки
Этого достаточно? если нужно полный текст, завтра запощу

bastii

Post deleted by

6yrop

выполняю через pgAdmin ни каких предупреждений

shlyumper

не в mssql
в прочем как и group by 1
судя по примеру выше это правильно, меньше глупых ошибок
В, бля, умник вылез. Ну при чем тут MSSQL, если тред про Postgres? Фтопку.

bastii

Удалил, и не надо так нервничать. Сам автор треда с mssql сравнивал, вот я и проверил.

6yrop


Ну во-первых, select distinct x
ну блин, хватит придираться, в первом посте не про distinct

Во-вторых, group by 1
и что? количество строк будет разное?
В-третьих, having
и что? количество строк будет разное?

Olyalyau

же написал пример -- если по C предполагается JOIN и его не сделать, то
будет полное произведение. У а, кстати, очень похоже на то -- 36 на 6 делится.

rosali

group by 1.
и что? количество строк будет разное?
Я не знаю насколько это стандартно, в MySQL group by 1 означает "группировать по первому столбцу выдачи". То есть результат будет очень зависеть от того, что написать между select и from

6yrop

Я не знаю насколько это стандартно, в MySQL group by 1 означает "группировать по первому столбцу выдачи".
это не стандартно, ни в какой стандарт не входит, это одно из убожеств MySQL

6yrop

же написал пример -- если по C предполагается JOIN и его не сделать, то
будет полное произведение. У а, кстати, очень похоже на то -- 36 на 6 делится.
ты подумал, прежде чем написать?

xz_post

>>это не стандартно, ни в какой стандарт не входит, это одно из убожеств MySQL
я сталкивался с подобном проблемой при переписывании запроса с MS SQL -> Firebird. Удивился что надо писать group by 1... но люди с sql.ru объяснили что это действительно стандарт ANSI 92...
И еще, как я заметил, глюкавый дот-нет провайдер может извращать sql запросы - в частности некоторые запросы с юнионом при вызове через ado.net давали всякую лажу..

6yrop

люди с sql.ru
авторитет что ли?
Посмотри сам стандарт
http://savage.net.au/SQL/
Оставить комментарий
Имя или ник:
Комментарий: