Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SQL запрос / Вывод данных из второй таблицы  [new]
Fautif
Member

Откуда:
Сообщений: 8
Вопрос дилетантский, помогите разобраться с настройкой ссылок между полями в таблицах.
Есть две таблицы: IncidentComment и Сontact:
Состав первой таблицы: IncidentID, Comment, CreatedOn, CreatedByID
Состав второй ContactID, Name
простенький запрос вывода полей из первой таблицы
Select IncidentID, Comment, CreatedOn, CreatedByID
From tbl_IncidentComment


Так вот поле CreatedByID из первой таблицы -это поле ContactID из второй
Все выводится нормально, кроме поля CreatedByID, т.к. данное поле - это айдишник записи в таблице Сontact и поэтому выводится идентификатор вместо текста.
Мне нужно, чтобы при выводе результата запроса вместо CreatedByID выводились данные из второй таблицы, т.е. результатом выполнения было поле Name из второй таблицы.
1 авг 12, 09:54    [12944377]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос / Вывод данных из второй таблицы  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
Select IncidentID, Comment, CreatedOn, (select top 1 Name from Сontact where ContactID  = CreatedByID )
From tbl_IncidentComment
1 авг 12, 09:59    [12944406]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос / Вывод данных из второй таблицы  [new]
Fautif
Member

Откуда:
Сообщений: 8
HandKot,

Спасибо, подобное пытался сделать по аналогии, но ничего не получилось в колонке выводится значение Null

Select IncidentID, Comment, CreatedOn, (select top 1 Name from tbl_Contact where ID  = CreatedByID )
From tbl_IncidentComment


Также пробовал с помощью JOIN обозначать таблицы, но там тоже не хватает знаний)
1 авг 12, 10:08    [12944451]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос / Вывод данных из второй таблицы  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5115
Fautif
Так вот поле CreatedByID из первой таблицы -это поле ContactID из второй

select top 1 Name from tbl_Contact where ID  = CreatedByID
вы с именами полей определитесь уж
1 авг 12, 10:10    [12944465]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос / Вывод данных из второй таблицы  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
Можно еще и так...
Select I.IncidentID, I.Comment, I.CreatedOn, C.Name
From tbl_IncidentComment I
INNER JOIN Сontact C
ON I.CreatedByID = C.ContactID
1 авг 12, 10:13    [12944476]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос / Вывод данных из второй таблицы  [new]
Fautif
Member

Откуда:
Сообщений: 8
Дедушка,

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

Select IncidentID, Comment, CreatedOn, (select top 1 Name from tbl_Contact where ID  = CreatedByID )
From tbl_IncidentComment


При выполнении этого запроса, в поле CreatedByID выдается Null
1 авг 12, 10:14    [12944483]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос / Вывод данных из второй таблицы  [new]
Fautif
Member

Откуда:
Сообщений: 8
Владимир СА,

Большое спасибо, все получилось.
1 авг 12, 10:15    [12944490]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос / Вывод данных из второй таблицы  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
Дык медвежья то услуга...
Читать DML надо...
1 авг 12, 10:17    [12944496]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос / Вывод данных из второй таблицы  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Владимир СА, надо сразу было LEFT JOIN писать.
Писать INNER - вредная привычка.
1 авг 12, 19:58    [12948887]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос / Вывод данных из второй таблицы  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
Mnior
Владимир СА, надо сразу было LEFT JOIN писать.
Писать INNER - вредная привычка.
Не спорю... мож и так...
Ну все зависит от настроенных связей меж таблицами...
2 авг 12, 10:07    [12950380]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос / Вывод данных из второй таблицы  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Владимир СА
Mnior
Владимир СА, надо сразу было LEFT JOIN писать.
Писать INNER - вредная привычка.
Не спорю... мож и так...
Ну все зависит от настроенных связей меж таблицами...
Это как запрос зависит от схемы?
В запросе пишется что необходимо получить. INNER и LEFT совершенно разные по смыслу запросы.

А то что на запрос "дайте мне жёлтую машину" вам выдают "самосвал", то для "карьерных работ" запрос неверен, хоть и результат оказался правильный.

От "настроенных связей" зависит оптимизация запроса.

Mnior
Писать INNER - вредная привычка.
Часто наблюдаю стремление смотреть только на результат запроса, при этом в самом запросе видно тотальное их непонимание. Отсюда и забивание гвоздей микроскопами.

PS: Владимир СА, я не утверждаю что вы не понимаете, я просто придираюсь к точности некоторых формулировок, никаких личностей.

KO
6 авг 12, 13:22    [12967694]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос / Вывод данных из второй таблицы  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
Mnior
Владимир СА, надо сразу было LEFT JOIN писать.
Писать INNER - вредная привычка.


соглашусь с Владимир СА
зачем писать LEFT, если поле, по которому идет привязка справочника, имеет значение NOT NULL и/или настроен форен кей?
6 авг 12, 13:32    [12967757]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос / Вывод данных из второй таблицы  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
HandKot
зачем писать LEFT, если поле, по которому идет привязка справочника, имеет значение NOT NULL и/или настроен форен кей?
Mnior
INNER и LEFT совершенно разные по смыслу запросы
Fautif
нужно, чтобы результат дополнялся данными из второй таблицы
Где вы тут умножение видите?

Повторяю:
Mnior
Запросы к базе от схемы никак не зависит?
А вы попытайтесь придумать пример когда зависит.
Когда это деревья ветер делают.
А потом сформулируйте, почему вы вдруг начинаете думать о типе JOIN смотря FK и т.п. Зачем вообще надо думать при написании запроса о схемах?

Более того, LEFT JOIN практически пишется намного чаще. Вам написать ещё "почему"?

HandKot
зачем писать LEFT
Зачем дописывать слово LEFT? Никто ничего не дописывает дополнительно.
Просто пишет то что нужно в данной задаче или "LEFT JOIN" или "INNER JOIN". Нет ничего тут "основного" или "по умолчанию".

PS: HandKot, или вы просто троллите?
6 авг 12, 16:02    [12969128]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос / Вывод данных из второй таблицы  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
Mnior

PS: HandKot, или вы просто троллите?

и не думал

автор
А потом сформулируйте, почему вы вдруг начинаете думать о типе JOIN смотря FK и т.п. Зачем вообще надо думать при написании запроса о схемах

я решаю, что надо применять простой INNER JOIN, если знаю, что это поле - привязка к справочнику (тот самый FK) и обязательно заполнено
если такого нет, то тогда, дыбы не "потерять записи" использую LEFT

ИМХО знание схемы, как и многие другие параметры (кол-во строк по таболицам, наличие индексов и т.п) облегчает написание запросов
к тому же, использование INNER и LEFT генерируют различные планы (возможно не всегда)

ЗЫЖ я высказал свое мнение и не заставляю с ним соглашаться или несоглашаться
6 авг 12, 16:19    [12969267]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос / Вывод данных из второй таблицы  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
HandKot,
A: Я еду на красный свет!
Б: Почему вы едете на красный свет?
А: Потому что я еду на красный!
Б: Хм. Что вас побуждает ехать на красный свет?
А: Когда загорается красный, я включаю передачу и трогаюсь.
Б: Блин. Я понял что вы едете на красный. Вы объясните почему вы это делаете?
...

HandKot
ИМХО знание схемы, как и многие другие параметры (кол-во строк по таболицам, наличие индексов и т.п) облегчает написание запросов к тому же, использование INNER и LEFT генерируют различные планы (возможно не всегда)
То что вы дополнительно задумываетесь о схеме и т.п. при написании запросов, ни сколько не легче чем если вы не задумываетесь об этом, а тупо пишите запрос.
Это не может быть "IMXO". Это тоже самое что "IMXO 1 + 1 = 3".
...
- Но как вы это делаете?
- Считаю количество ног и делю на четыре.


Вы путаете причину и следствия, это схему подстраивают под запросы, а не наоборот.
Это CONSTRAINT ставят, чтобы проверки делать заранее, переносить их из одних запросов на другие.

HandKot
INNER и LEFT генерируют различные планы (возможно не всегда)
Это всё до фени, если запрос неверен.
Совершенно неважно идёте вы или бежите если не по той дороге. Только не надо чепухи - что все дороги ведут в Рим.

INNER - перемножение
LEFT - дополнение
Или вы привыкли делать не то что просят/нужно?

И главное, LEFT даёт лучше план (или не хуже), практически всегда.

PS: Это один из тех случаев когда совершенно не понимают смысл и силу декларативного программирования.
7 авг 12, 15:35    [12975992]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос / Вывод данных из второй таблицы  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Ручной кот оказался не таким ручным, но зато не царапается.
9 авг 12, 11:42    [12986525]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос / Вывод данных из второй таблицы  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
+ офтоп
Mnior
Ручной кот оказался не таким ручным, но зато не царапается.

ну, во-первых, вообще-то не "ручной", это у мнея аббревиатура такая
а, во-вторых, что бестолку спорить, каждый остался при своем мнении :)
и, в-третьих, автор топика, уже давно получил ответ
9 авг 12, 11:54    [12986590]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос / Вывод данных из второй таблицы  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
+ HandKot
HandKot
что бестолку спорить, каждый остался при своем мнении :)
Один из глупых высказываний.
Но пипл хавает, мол другие так говорят, значит и я могу.

Словами никто никого заставить делать/думать не может. Переходить на личности бессмысленно в общественном месте.
Никого не интересует личные взгляды, тут есть только аргументы.
Если какое либо высказывание было аргументированно, то оно общественно верное. Нет, значит оно бессмысленно.

Ваше высказывание не аргументированно, а обратное было представлено, значит оно не верно. Не зависимо кто с этим согласен или нет. Хотите поменять это - аргументируйте. Хотите что бы присутствующие считали вас "правым" (боже, кому это нужно) аргументируйте.

С виду, это напоминает такое варварское отношение: И не уметь показать "правоту" и при этом требовать что бы вас считали "правым". Хомо-сапиенсы блин.
Это что получается, вот я не умею рисовать, но я должен требовать, что бы меня не называли "плохим художником"? Бред этичного сенсорика.

Так что не надо себя "обелять", говорите по существу.
Слились? Ну это ваши проблемы, что вы не хотите разбираться в данном вопросе.

PS: Высказывание (про "своё мнение") очень предсказуемо. Обычно если "проблемы с логикой" оно проявляется во всех ипостасях.
См. соционику.
9 авг 12, 15:42    [12988662]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить