Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.08.16;
Скачать: CL | DM;

Вниз

В каких случаях...   Найти похожие ветки 

 
Cyrax ©   (2009-06-15 19:30) [0]

...запрос select * from table where id = id вернёт не всё содержимое таблицы ?

"Не всё содержимое таблицы" - это, я понимаю, либо не все строки (отвечает условие), либо не все столбцы (отвечает звёздочка).


 
palva ©   (2009-06-15 19:34) [1]

Да, не всё.


 
Игорь Шевченко ©   (2009-06-15 19:36) [2]

интересен вопрос, в каких случаях вернется все...


 
palva ©   (2009-06-15 19:36) [3]

Ах да, в каких случаях... Ну, когда в некоторых строках id равно NULL, эти строки не вернет.


 
12 ©   (2009-06-15 19:37) [4]

id is null


 
DVM ©   (2009-06-15 19:38) [5]


> В каких случаях...
>
> Cyrax ©   (15.06.09 19:30)
>
> ...запрос select * from table where id = id вернёт не всё
> содержимое таблицы ?

когда поля id там не будет он ничего не вернет (тоже в своем роде "не все")


 
12 ©   (2009-06-15 19:39) [6]

2 palva
обогнал :)
но, поправка, - id is NULL :)


 
Сергей М. ©   (2009-06-15 19:39) [7]


> либо не все столбцы (отвечает звёздочка).


Если "звездочка" вернет не все столбцы, я пойду мылить веревку.
А как иначе, если все во что верил обратилось в прах ?)


 
Cyrax ©   (2009-06-15 19:51) [8]


> Если "звездочка" вернет не все столбцы, я пойду мылить веревку.

Так всякое бывает в конкретных реализациях...


 
Cyrax ©   (2009-06-15 20:01) [9]

Я тоже подумал про NULL, только мне показалось, что это зависит от реализации SQL.


 
Anatoly Podgoretsky ©   (2009-06-15 20:12) [10]

> Cyrax  (15.06.2009 19:51:08)  [8]

Так это П и это не лечится.


 
sniknik ©   (2009-06-15 20:27) [11]

> Если "звездочка" вернет не все столбцы, я пойду мылить веревку.
блин, боюсь сейчас стану убийцей но из песни слов не выкинешь...
проверь запрос через jet к таблице парадокса содержащему поле/я типа graphic.

> что это зависит от реализации SQL.
и от настроек. в mssql например можно задать режим когда NULL = NULL будет true, а не не определено как обычно.


 
oldman ©   (2009-06-15 20:39) [12]


> В каких случаях...
> ...запрос select * from table where id = id вернёт не всё
> содержимое таблицы ?


А вот не надо составлять такой запрос. На фига тебе по запросу получать ВСЕ содержимое таблицы?
:)))


 
Cyrax ©   (2009-06-15 20:49) [13]

А может мне надо получить НЕ ВСЕ содержимое таблицы...


 
AndreyV ©   (2009-06-15 20:53) [14]

> [13] Cyrax ©   (15.06.09 20:49)
> А может мне надо получить НЕ ВСЕ содержимое таблицы...

Приехали.


 
blackman ©   (2009-06-15 21:02) [15]

Ромашка какая-то :)


 
Petr V. Abramov ©   (2009-06-15 21:42) [16]

вопрос на собеседовании чела, который в резюме написал "знаю все СУБД, какие есть".


 
Cyrax ©   (2009-06-15 22:07) [17]

Насчёт собеседования -да, действительно, это из собеседования.
Так это вы его "собеседовали" ?
Он ответил ?


 
Игорь Шевченко ©   (2009-06-15 22:13) [18]


> Насчёт собеседования -да, действительно, это из собеседования.


провалил


 
Cyrax ©   (2009-06-15 22:19) [19]

Так он у вас собеседование проходил ?
Вы все что - в одной конторе ?

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


 
Ega23 from home   (2009-06-15 22:45) [20]

Если собеседование - то на 99% вопрос про NULL.

Насчёт звёздочки. Проверить сейчас возможности нет (нету СУБД никакой). Но, как мне кажется, это может быть вьюха с объединением двух таблиц, в каждой из которых есть поле id. Т.е. 2 ColumnName = "id"
В этом случае будет непонятно, какой id какому равен


 
Игорь Шевченко ©   (2009-06-15 22:54) [21]


> Но, как мне кажется, это может быть вьюха с объединением
> двух таблиц, в каждой из которых есть поле id. Т.е. 2 ColumnName
> = "id"


не может быть такой вьюхи


 
Cyrax ©   (2009-06-15 23:42) [22]


> В этом случае будет непонятно, какой id какому равен

В таких случаях запросы не выполняются - вылетает ошибка.
Соответственно, речи о возврате не всех записей быть не может.


 
Ega23 from home   (2009-06-16 00:25) [23]


> не может быть такой вьюхи


Я во вьюхах не силён, но мне кажется от СУБД зависит.
Ещё раз повторюсь: проверить сейчас не могу. Завтра для MSSQL посмотрю.


 
Игорь Шевченко ©   (2009-06-16 00:50) [24]

Ega23 from home   (16.06.09 00:25) [23]

А подумать, не смотря ?


 
Ega23 ©   (2009-06-16 08:08) [25]


> А подумать, не смотря ?


А что подумать?
Для MSSQL:

Create table #t1 (id int, t1fld varchar(10));
Create table #t2 (id int, t2fld varchar(10));

insert into #t1 (id, t1fld) values (1, "aaa");
insert into #t1 (id, t1fld) values (2, "bbb");

insert into #t2 (id, t2fld) values (1, "ccc");
insert into #t2 (id, t2fld) values (2, "ddd");

Select * from #t1, #t2 where #t1.id=#t2.id

Drop table #t1;
Drop table #t2;


Результат:

id          t1fld      id          t2fld
----------- ---------- ----------- ----------
1           aaa        1           ccc
2           bbb        2           ddd

(2 row(s) affected)


Если такое проходит с обычным завпросом, то не вижу причин, почему не должно пройти с вьюхой (сейчас попробую).


 
Ega23 ©   (2009-06-16 08:14) [26]

Проверил с вьюхой. Тут действительно сервер при создании не пропустил:
Msg 4506, Level 16, State 1, Procedure TestView, Line 3
Имена столбцов в каждом представлении или функции должны быть уникальными. Имя столбца "id" в представлении или функции "TestView" указано несколько раз.


Но с просто селектом - проходит. Возможно, на какой-нибудь конкретной СУБД также пройдёт.


 
test ©   (2009-06-16 08:28) [27]

Ega23 ©   (16.06.09 08:08) [25]

Select
#t1.id as t1id, t1fld, #t2.id as  t2id, t2fld
into #temp
from #t1, #t2
where isnull(#t1.id,0)=isnull(#t2.id,0)

зы
в MsSQL join рулит


 
Ega23 ©   (2009-06-16 08:30) [28]


> test ©   (16.06.09 08:28) [27]


Это к чему было?


 
test ©   (2009-06-16 08:59) [29]

Ega23 ©   (16.06.09 08:30) [28]
Твой код запрос из двух таблиц, результат во временную таблицу. Проблема только в том что он null перемножит.(Количество null первой таблицы * количество null второй таблицы)


 
Ega23 ©   (2009-06-16 09:03) [30]


> Твой код запрос из двух таблиц, результат во временную таблицу.
>  Проблема только в том что он null перемножит.(Количество
> null первой таблицы * количество null второй таблицы)


А, в этом плане. Не, я тут продемонстрировал принципиальную возможность получения RecordSet с двумя одинаковыми ColumnName.


 
antonn ©   (2009-06-16 09:09) [31]


> А вот не надо составлять такой запрос. На фига тебе по запросу
> получать ВСЕ содержимое таблицы?
> :)))
>

скорее всего потому что ему нужно ВСЕ столбцы таблицы %)


 
Ega23 ©   (2009-06-16 09:10) [32]


> скорее всего потому что ему нужно ВСЕ столбцы таблицы %)


Select * from Table where 0=1


 
antonn ©   (2009-06-16 09:13) [33]


> Ega23 ©   (16.06.09 09:10) [32]

я не про строки :)


 
Ega23 ©   (2009-06-16 09:16) [34]


> я не про строки :)


И я не про строки. Ты получишь пустой рекордсет, но со всеми столбцами и их метаданными.


 
Игорь Шевченко ©   (2009-06-16 11:16) [35]


> Возможно, на какой-нибудь конкретной СУБД также пройдёт


А еще подумать ?


 
Ega23 ©   (2009-06-16 11:18) [36]


> А еще подумать ?


А фигли "ещё думать", я почем знаю, как в "какой-нибудь конкретной СУБД" запись в INFORMATION_SCHEMA реализовано?


 
Игорь Шевченко ©   (2009-06-16 11:25) [37]

Ega23 ©   (16.06.09 11:18) [36]


> А фигли "ещё думать",


Ты можешь создать таблицу с двумя одинаковыми названиями полей (допустим, в "любой СУБД") ?

А почему ?


 
Ega23 ©   (2009-06-16 11:36) [38]


> Ты можешь создать таблицу с двумя одинаковыми названиями
> полей (допустим, в "любой СУБД") ?


А View - это не таблица, вообще-то. Хоть и ведёт себя как таблица.


 
test ©   (2009-06-16 11:42) [39]

Ega23 ©   (16.06.09 11:36) [38]
Все равно дубли вывести она не выведет, дублям надо псевдоним присваевать.


 
Кщд   (2009-06-16 11:42) [40]

>Ega23 ©   (16.06.09 11:36) [38]
>А View - это не таблица, вообще-то. Хоть и ведёт себя как таблица.
допустим, создана view с двумя одноименными полями(т.е. полностью идентичными), например, id
как бы теперь в sql использовать эти поля?


 
brother ©   (2009-06-16 11:43) [41]

> например, id

обычно он уникален


 
Игорь Шевченко ©   (2009-06-16 11:52) [42]

Ega23 ©   (16.06.09 11:36) [38]


> А View - это не таблица, вообще-то.


не таблица она только тем, что не хранит данные. Если ты не можешь создать таблицу с двумя одинаковыми названиями полей, то почему должна быть возможность создать view ?

Имя поля вместе с именем таблицы(view,процедурой) задает источник данных. Если есть одинаковые поля, какой источник использовать ?


 
Ega23 ©   (2009-06-16 11:57) [43]

Коллеги, я чего-то не пойму - вы мне чего объяснить-то хотите?
То что в таблицу нельзя два одинаковых по имени поля прописать? Так это я в курсе.
То, что даже если и можно, то будет бессмысленно, т.к. неясно, когда к комуобращаться? Так и это я в курсе.
Но в [25] был вполне конкретный пример получения рекордсета с двумя одинаковыми столбцами.

При этом, если селект из [25] немного переделать, то тоже exception будет:


Select * from
 (
   Select * from #t1, #t2 where #t1.id=#t2.id
 ) as A

Msg 8156, Level 16, State 1, Line 11
Столбец "id" для "A" указан более одного раза.



 
Игорь Шевченко ©   (2009-06-16 12:02) [44]

Ega23 ©   (16.06.09 11:57) [43]


> Но в [25] был вполне конкретный пример получения рекордсета
> с двумя одинаковыми столбцами.


рекордсет - это не view


 
sniknik ©   (2009-06-16 12:10) [45]

> Столбец "id" для "A" указан более одного раза.
это где так получается? я сколько не пробую все натыкаюсь на -
The column "id" was specified multiple times for "A"


 
KSergey ©   (2009-06-16 12:25) [46]

> Ega23 ©   (16.06.09 11:57) [43]
> Коллеги, я чего-то не пойму - вы мне чего объяснить-то хотите?

Что не может быть реализации SQL-сервера, в которой можно было бы создать view, возвращающую колонки с идентичными именами. Т.е. утверждение (вопрос)

> Ega23 ©   (16.06.09 08:14) [26]
> Возможно, на какой-нибудь конкретной СУБД также пройдёт.

всегда равно FALSE.


 
Кщд   (2009-06-16 12:45) [47]


> brother ©   (16.06.09 11:43) [41]
> обычно он уникален

насчет обычно - это весьма спорно - например, для систем с версионированием, построенным на одной таблице
насчет уникальности, то, собственно, кто мешает:
create view vw_crazy_view as select t.id, t2.id from t, t2
в таблицах t, t2 - id, соответственно, уникален


 
Ega23 ©   (2009-06-16 12:54) [48]


> sniknik ©   (16.06.09 12:10) [45]
>
> > Столбец "id" для "A" указан более одного раза.
> это где так получается? я сколько не пробую все натыкаюсь
> на -
> The column "id" was specified multiple times for "A"


Надо было SQLEXPR_RUS.EXE качать.  :)))


 
Cyrax ©   (2009-06-16 17:14) [49]


> вопрос на собеседовании чела, который в резюме написал "знаю
> все СУБД, какие есть".

А это не тот ли, который декомпиляторы для ЯВУ пишет ???
Обычно такие простые вопросы осилить не могут - это всё-равно что homo sapiens до уровня мартышки опуститься...


 
Anatoly Podgoretsky ©   (2009-06-16 20:52) [50]

> Ega23  (16.06.2009 11:36:38)  [38]

View это виртуальная таблица.


 
Cyrax ©   (2009-06-16 21:26) [51]


> View это виртуальная таблица.

В терминах БД это не Таблица, а Представление. А в вопросе используется как раз терминология БД.


 
Anatoly Podgoretsky ©   (2009-06-16 21:35) [52]

Представление это виртуальная таблица.
Потому и виртуальная, что не реальная, а только видимость.


 
Игорь Шевченко ©   (2009-06-16 21:37) [53]

"- Ствол сделан из высоколегированной стали.
- Неверно.
- Почему ?
- Потому что написано "ствол сделан из того же материала"
"
(с) известный анекдот


 
Павел Калугин ©   (2009-06-16 21:41) [54]

А потому что этот диплом никто читать не будет - сделаем ствол из льда
Игорь, зачем на собеседовании задавать вопросы. которые перевернут пол форума?


 
Игорь Шевченко ©   (2009-06-16 21:47) [55]

Павел Калугин ©   (16.06.09 21:41) [54]

"Если вопросы задаются, значит, кому-то это нужно"


 
Cyrax ©   (2009-06-16 22:36) [56]

>Представление это виртуальная таблица.
Не спроста ведь её обозвали Представлением. При этом официальных синонимов не оставили. Стало быть, если Таблица, значит, Таблица. Имхо.


 
Anatoly Podgoretsky ©   (2009-06-17 00:47) [57]

> Cyrax  (16.06.2009 22:36:56)  [56]

Потому что только представляет реальные таблицы.


 
Кщд   (2009-06-17 07:47) [58]


> Cyrax ©   (16.06.09 22:36) [56]
> Не спроста ведь её обозвали Представлением. При этом официальных
> синонимов не оставили. Стало быть, если Таблица, значит,
>  Таблица. Имхо.

из-за чего весь "сыр-бор"?
человек не ответил на элементарный вопрос по SQL на собеседовании
это достойно столь бурной полемики на тему "является ли лошадь Пржвальского лошадью"?


 
pasha_golub ©   (2009-06-17 09:37) [59]

Если системные колонки считать частью "содержимого таблицы", то их тоже не вернет, например, в Постгресе.

То есть для получения всех системных надо будет писануть:

SELECT oid, tableoid, xmin, xmax, cmin, cmax, ctid, * FROM table


 
pasha_golub ©   (2009-06-17 09:39) [60]

Кстати, некоторые писаки "от сохи" используют системные колонки в качестве PK в Постгресе, за что я бы отрывал руки.


 
Ega23 ©   (2009-06-17 10:06) [61]


> Кстати, некоторые писаки "от сохи" используют системные
> колонки в качестве PK в Постгресе, за что я бы отрывал руки.


+ сто тыщ мильёнов.



Страницы: 1 2 вся ветка

Текущий архив: 2009.08.16;
Скачать: CL | DM;

Наверх




Память: 0.63 MB
Время: 0.015 c
15-1245357007
Юрий
2009-06-19 00:30
2009.08.16
С днем рождения ! 19 июня 2009 пятница


1-1212058773
Vlad Oshin
2008-05-29 14:59
2009.08.16
DevExpress, TcxRTTIInspector. Как выловить rows=(TStrings)?


15-1245044573
blurcode
2009-06-15 09:42
2009.08.16
Срубил меня остеохондроз, видимо.


2-1245317429
Бонд3000
2009-06-18 13:30
2009.08.16
Результат выполнения функции.


15-1245226088
Юрий
2009-06-17 12:08
2009.08.16
С днем рождения ! 17 июня 2009 среда