Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2019, 10:53   #1
mavrikVIII
Пользователь
 
Регистрация: 13.03.2019
Сообщений: 16
По умолчанию Помогите начинающему SQLщику)

Всем доброе время суток)
Есть таблица, скрин приложил. Нужно вывести все родительские элементы у 4-д/1. Т.е. должен "гулять" по полям Link и F_docs.
Пробую сделать так:
select
t2.LINK,
t2.C_Number,
t2.F_Docs
from DD_Docs as t1, DD_Docs as t2
where (t2.Link = t1.F_Docs )
Так выводит все, а когда добавляю условие
and t2.C_Number = '4-д/1'; выводит одно значение.

Просьба не сильно критиковать, только начал изучение. ПРошу помощи)
Изображения
Тип файла: png dsk.png (14.6 Кб, 91 просмотров)
mavrikVIII вне форума Ответить с цитированием
Старый 13.03.2019, 11:36   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
а когда добавляю условие
and t2.C_Number = '4-д/1'; выводит одно значение.
А сколько их таких на скрине ?!
вот он и выводит то что есть.

Цитата:
Нужно вывести все родительские элементы у 4-д/1.
что есть "родитель" в твоей БД?

Цитата:
Т.е. должен "гулять" по полям Link и F_docs.
понятно что определяется этими полями, НО ...
  • у родителя ЕСТЬ ссылка на дочерний (какое поле на какое?)
  • у дочернего ЕСТЬ ссылка на родителя(и опять какое на какое?)
и какое из включений таблицы(t1, t2) есть родитель и есть дочки ?

возможно после ответов на данные вопросы все станет ясно и самому
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 13.03.2019, 11:36   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

в F_Docs находится ссылка на родителя?
и Вам нужно получить сначала link=7 потом у него родитель link=6 потом у него родитель link=1 ?
Так это называется иерархическая структура и нужны особого вида запросы (или цикл).
в стандартном SQL нет иерархических запросов.
Поэтому нужно смотреть конкретную СУБД и реализовывать запрос в рамках её возможностей.

p.s. если глубина вложенности не более чем N, то можно стандартными средствами намутить N подзапросов. Но это, разумеется, костыли и не (очень) красиво.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.03.2019, 11:39   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
в F_Docs находится ссылка на родителя?
и Вам нужно получить сначала link=7 потом у него родитель link=6 потом у него родитель link=1 ?
Так это называется иерархическая структура и нужны особого вида запросы (или цикл).
в стандартном SQL нет иерархических запросов.
думаю что там все проще.
Цитата:
Помогите начинающему
нужны только "прямые" родители. (ровно ОДИН уровень).
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 13.03.2019, 11:54   #5
mavrikVIII
Пользователь
 
Регистрация: 13.03.2019
Сообщений: 16
По умолчанию

Среда: SQL Server Management Studio v17.9.1
Код самой таблицы:
CREATE TABLE dbo.DD_Docs -- Документы
(
[LINK] [int] IDENTITY NOT NULL PRIMARY KEY, -- Ид
[C_Number] [varchar] (50) NULL, -- Номер
[F_Subscr] [int] NOT NULL, -- Л/с
[C_Doc_Type] [varchar](50) NOT NULL, -- Тип
[D_Date] [date] NOT NULL DEFAULT GETDATE(), -- Дата
[F_Docs] [int] NULL, -- Родительский документ
CONSTRAINT FK_DD_Docs_DD_Docs FOREIGN KEY (F_Docs) REFERENCES dbo.DD_Docs (LINK)

Я просто не до конца понимаю, как это реализовать.
Знаю, что должно быть на выходе:
Изображения
Тип файла: png 111.png (3.1 Кб, 86 просмотров)
mavrikVIII вне форума Ответить с цитированием
Старый 13.03.2019, 12:29   #6
mavrikVIII
Пользователь
 
Регистрация: 13.03.2019
Сообщений: 16
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
думаю что там все проще.
Мб действительно просто, только я не понимаю, как это можно реализовать
mavrikVIII вне форума Ответить с цитированием
Старый 13.03.2019, 12:29   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

https://www.e-du.ru/2016/07/ms-sql-r...uery-tree.html
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.03.2019, 13:03   #8
mavrikVIII
Пользователь
 
Регистрация: 13.03.2019
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Прошу простить мою глупость, но что-то пошло не так)
Изображения
Тип файла: png dsk1.png (21.6 Кб, 121 просмотров)
mavrikVIII вне форума Ответить с цитированием
Старый 13.03.2019, 13:17   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Попробуй заменить это Recursive на что-то попроще. Судя по цвету воспринимается как зарезервированное слово
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.03.2019, 13:25   #10
mavrikVIII
Пользователь
 
Регистрация: 13.03.2019
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Попробуй заменить это Recursive на что-то попроще. Судя по цвету воспринимается как зарезервированное слово
Попробовал, ничего не меняется почему-то.
Изображения
Тип файла: png 22.png (20.2 Кб, 119 просмотров)
mavrikVIII вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите начинающему Родион23 C# (си шарп) 6 23.05.2016 23:43
Помогите начинающему qeesl Общие вопросы по Java, Java SE, Kotlin 5 31.10.2015 19:01
Помогите начинающему. Небесный Общие вопросы Delphi 12 04.02.2007 08:56