|
|
|
|
|
для: oradev
(13.07.2007 в 03:28)
| | >Я который раз убеждаюсь, что вы не хотите меня слушать, а пересказываете план выполнения запроса.
>Я уже сказал, что опечатка в привиденном запросе автора топика,
Кто Вам это сказал? Автор?
Я ни Вашей трактовки текста запроса, ни подтверждения её автором топика не увидел.
>ясно что из таблицы block нужно выбирать перечисленные столбцы.
Запрос их именно оттуда и выбирает, судя по (11.07.2007 в 23:01)
С этим никто не спорит.
>А во вторых я пытаюсь до вас всю ночь довести, что
>SELECT id,head, link, style FROM block JOIN blocks ON blocks.id_block=block.id;
>SELECT id,head, link, style FROM block;
>Это не одно и тоже. Вы суть то понимаете или нет.
Это не одно и то же. Второй просто выведет таблицу.
Результатом первого будет ambigous column id.
Когда исправите ошибки, можем продолжить.
PS. Я очень сомневаюсь, что в теме соединений таблиц Вы сможете объяснить мне что-то, что я не знаю. В других темах - несомненно, с ораклом мне приходилось работать нечасто.
Но в этой - увы. | |
|
|
|
|
|
|
|
для: Trianon
(13.07.2007 в 02:47)
| | Я который раз убеждаюсь, что вы не хотите меня слушать, а пересказываете план выполнения запроса.
Я уже сказал, что опечатка в привиденном запросе автора топика, ясно что из таблицы block нужно выбирать перечисленные столбцы. А во вторых я пытаюсь до вас всю ночь довести, что
SELECT id,head, link, style FROM block JOIN blocks ON blocks.id_block=block.id;
SELECT id,head, link, style FROM block;
Это не одно и тоже. Вы суть то понимаете или нет. | |
|
|
|
|
|
|
|
для: oradev
(13.07.2007 в 02:25)
| | >Давайте по фактам, ваша фраза:
Ок.
>>На мой взгляд, запрос практического смысла не имеет. Именно из-за того, что не выбирается ничего из таблицы blocks.
>Относительно запроса SELECT head, link, style FROM blocks JOIN block ON blocks.id_block=block.id;
>Вызывает у меня некое непонимание вами теории проектирования БД, а именно:
>1) Из таблицы blocks как раз-таки все выбирается в этом случаи.
Выбираются поля head, link, style. Все они принадлежат таблице block.
Из таблицы blocks вышеприведенным запросом не выбирается ни одного столбца.
>2)Вы поймите что стоит применить магию как мы получим разные запросы
>SELECT id_block,head, link, style FROM blocks JOIN block ON blocks.id_block=block.id;
>SELECT id_block,head, link, style FROM blocks;
>Второй запрос не всегда эквивалентен первому.
Чтобы получить ошибку (unknown column head in field list) во втором запросе, совсем не обязательно применять магию. Естественно, корректный и ошибочный запрос друг другу не эквивалентны.
PS. На Вашем месте делать выводы о том, у кого и как обстоит с теорией проектирования БД я бы поостерегся.
Я, вот, не делаю, не смотря на то, что Вы тут насочиняли. | |
|
|
|
|
|
|
|
для: Trianon
(12.07.2007 в 10:45)
| | Давайте по фактам, ваша фраза:
>На мой взгляд, запрос практического смысла не имеет. Именно из-за того, что не выбирается ничего из таблицы blocks.
Относительно запроса
SELECT head, link, style FROM blocks JOIN block ON blocks.id_block=block.id;
Вызывает у меня некое непонимание вами теории проектирования БД, а именно:
1) Из таблицы blocks как раз-таки все выбирается в этом случаи. Ну опечатка наверное!
2)Вы поймите что стоит применить магию как мы получим разные запросы
SELECT id_block,head, link, style FROM blocks JOIN block ON blocks.id_block=block.id;
SELECT id_block,head, link, style FROM blocks;
Второй запрос не всегда эквивалентен первому. | |
|
|
|
|
|
|
|
для: oradev
(13.07.2007 в 01:06)
| | Момент первый.
Строки таблицы blocks с внешним ключом id_block содержащим NULL вообще никак не повлияют на результат запроса, потому что соединение внутреннее, а равенство NULL тождественно равно false. И значит такие строки не образуют JOIN-ON соответствий в принципе.
Так что не "ограничиваете" а "исключаете".
Момент второй.
будут исключены все строки block, которым не нашлось подходящего id_blocks.
Это то, что я назвал "банально не найден".
Этого не случилось бы, будь соединение экзотическим правым внешним.
Момент третий.
строки block, которым нашлось несколько таких соответствий (ключ то чужой!) будут размножены одинаковыми. Они отличались бы, будь в списке полей SELECT хотя бы одно поле из левой таблицы. | |
|
|
|
|
|
|
|
для: oradev
(12.07.2007 в 23:31)
| | >Судя по привиденным структурам таблиц, вы имеете
>Таблицу block - родительская
>Таблицу blocks - дочернюю
>
>Вот этот запрос:
>SELECT head, link, style FROM blocks JOIN block ON blocks.id_block=block.id;
>
>выбирает соответствующие столбцы из дочерней таблицы blocks.
>
>Но вы ограничиваете строки у которых внешний ключ id_block равен NULL
>поскольку первичный ключ id таблицы block ни при каких случаях не может быть равен NULL
>
|
Читаете узнаете | |
|
|
|
|
|
|
|
для: oradev
(13.07.2007 в 00:39)
| | Замечательно. Какое отношение имеет семантическое различие вызовов COUNT(column) и COUNT(*) к операции внутреннего соединения таблиц? | |
|
|
|
|
|
|
|
для: Trianon
(13.07.2007 в 00:28)
| | >А что с ним не так?
>Это уже начинает становиться забавным....
create table emp_copy
(job VARCHAR2(20));
insert into emp_copy values('CLERK');
insert into emp_copy values('MANAGER');
insert into emp_copy values(NULL);
select count(*) from emp_copy;
3
select count(job) from emp_copy;
2
|
| |
|
|
|
|
|
|
|
для: Roma
(12.07.2007 в 17:57)
| | >тогда можо хотя бы пример, когда используется LEFT JOIN (вместе со структурой таблиц)
В номенклатуре ANSI/SQL это выглядит вот так:
select e.ename, d.DEPTNO
from emp e LEFT OUTER JOIN dept d
ON e.DEPTNO = d.DEPTNO;
|
Или так:
select e.ename, d.deptno
from emp e RIGHT OUTER JOIN dept d
ON e.DEPTNO = d.DEPTNO;
|
где dept - таблица отелов, emp - таблица служащих в данных отделах ( из расчета служащий может работать только в одном департаменте) | |
|
|
|
|
|
|
|
для: oradev
(13.07.2007 в 00:24)
| | А что с ним не так?
Это уже начинает становиться забавным.... | |
|
|
|
|