![]() |
|
Модераторы: skyboy |
![]()
|
|
| vlad275 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 485 Регистрация: 20.3.2008 Репутация: нет Всего: -3 |
Вывести имена программистов C++
Таблицы Поля ID_Table: NameID, ProfessionID Name_Table: Name, NameID Profession_Table: Profession, ProfessionID SELECT Name_Table.Name FROM Name_Table INNER JOIN ID_Table ON ID_Table.ProdessionID = Profession_Table.ProfessionID INNER JOIN ID_Table ON ID_Table.NameID = Name_Table.NameID WHERE Profession_Table.Profession='C++' Правильно ли? -------------------- Кто, как и зачем запустил этот механизм уничтожения России: http://rutube.ru/tracks/54915.html?v=e74a9...c7e5d24da5656d8 |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
Смотря где. Аксесс, например, будет ругаться.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| vlad275 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 485 Регистрация: 20.3.2008 Репутация: нет Всего: -3 |
А MS SQL Server?
-------------------- Кто, как и зачем запустил этот механизм уничтожения России: http://rutube.ru/tracks/54915.html?v=e74a9...c7e5d24da5656d8 |
|||
|
||||
| TaNK |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 669 Регистрация: 29.10.2006 Где: Краснодар Репутация: нет Всего: 1 |
а как сервер..определит...что за таблица Profession_Table.ProfessionID если ты с ней не соединяешься
может вот так надо ?
Это сообщение отредактировал(а) TaNK - 25.7.2008, 12:53 -------------------- Oracle 11.2.0.3.0 FireBird 1.0-2.5 |
||||||
|
|||||||
| vlad275 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 485 Регистрация: 20.3.2008 Репутация: нет Всего: -3 |
Сразу после JOIN должна идти таблица для соединения? Я думал обе таблицы идущие после ON соединяются
-------------------- Кто, как и зачем запустил этот механизм уничтожения России: http://rutube.ru/tracks/54915.html?v=e74a9...c7e5d24da5656d8 |
|||
|
||||
| while |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 25.7.2008 Репутация: нет Всего: нет |
select nt.NAME
from PROFESSION_TABLE pt left join ID_TABLE it on (it.PROFESSIONID = pt.PROFESSIONID) left join NAME_TABLE nt on (nt.NAMEID = it.NAMEID) where pt.PROFESSION = 'C++' |
|||
|
||||
| vlad275 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 485 Регистрация: 20.3.2008 Репутация: нет Всего: -3 |
TaNK,
Я правильно понял, что в "from PROFESSION_TABLE pt" идет соединение с PROFESSION_TABLE "left join ID_TABLE it on (it.PROFESSIONID = pt.PROFESSIONID)" c ID_TABLE "left join NAME_TABLE nt on (nt.NAMEID = it.NAMEID)" c NAME_TABLE и поменять их местами нельзя? -------------------- Кто, как и зачем запустил этот механизм уничтожения России: http://rutube.ru/tracks/54915.html?v=e74a9...c7e5d24da5656d8 |
|||
|
||||
| Nigel |
|
|||
|
познаю мир ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 20.11.2007 Репутация: нет Всего: 19 |
зачем 3 таблицы, когда можно обойтись двумя?
|
|||
|
||||
| vlad275 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 485 Регистрация: 20.3.2008 Репутация: нет Всего: -3 |
Такова была задачка на собеседовании
-------------------- Кто, как и зачем запустил этот механизм уничтожения России: http://rutube.ru/tracks/54915.html?v=e74a9...c7e5d24da5656d8 |
|||
|
||||
| while |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 25.7.2008 Репутация: нет Всего: нет |
По русски: Выбираем из таблицы PROFESSION_TABLE записи с профессией pt.PROFESSION = 'C++', если таковые есть, то присоединяем ID_TABLE с записями, содержащими значения it.NAMEID, для которых (если таковые имеются), из таблицы NAME_TABLE выбираем имена. "если" - можно убрать, если имеються внешние ключи "между" указанными таблицами.
Что именно? Если первый и второй left join, то нет. Вот. А вообще для разных СУБД указанный запрос может давать разные результаты. Подобное наблюдалось. Проверь. Это сообщение отредактировал(а) while - 27.7.2008, 00:31 |
||||
|
|||||
| vlad275 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 485 Регистрация: 20.3.2008 Репутация: нет Всего: -3 |
А если INNER JOIN?
-------------------- Кто, как и зачем запустил этот механизм уничтожения России: http://rutube.ru/tracks/54915.html?v=e74a9...c7e5d24da5656d8 |
|||
|
||||
| goodday1941 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 709 Регистрация: 16.7.2006 Где: Украина, Киев Репутация: нет Всего: 9 |
ну помоему ситуация как раз мени ту мени... -------------------- SCJP 6 |
|||
|
||||
| while |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 25.7.2008 Репутация: нет Всего: нет |
1. LEFT JOIN: При выполнении условия сцепления таблиц, к значениям полей из первой таблицы присоединяются поля таблицы указанной в LEFT JOIN. Если условие не выполняется, присоединяются пустые поля второй таблицы, т.е. со значением NULL, но в любом случае из 1-й таблицы (стоящей слева от LEFT JOIN) будут выбраны записи (если они есть конечно).
2. INNER JOIN: Тоже, что и с LEFT JOIN, но отобраны будут записи при наличии СОВПАДЕНИЙ условия в обоих таблицах. Если условие не выполниться - записей не будет, в т.ч. из первой таблицы. 3. НО: если между таблицами есть "зависимости", т.е. FK - внешние ключи (или триггеры, контролирующие наличие записей в обоих таблицах), по связующим полям, можно ограничиться LEFT JOIN. А они должны быть. Это часть логической целостности БД. Пример несоответствия, для которого INNER JOIN не вернет записей - в таблице ID_TABLE будет (будут) указаны имена (или) профессии, не содержащиеся в таблице (таблицах) NAME_TABLE (PROFESSION_TABLE). 4. Условия нужно уточнять при получении тестового задания.
даст тот же результат, см. п. 2. А вообще нужно ЧИТАТЬ и ПРОБОВАТЬ.
Да можно, конечно и одной. ЗАДАНИЕ ТАКОЕ. ТЕСТОВОЕ. |
||||
|
|||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |