Объединение операторов SQL Atrium Syntess Firebird DB

Я пытаюсь получить (одну или несколько) числовых строк (PROGCODE), которые прикреплены к ОБЪЕКТУ (т.е. зданию), который связан с отношением, которое, в свою очередь, имеет GC_ID (уникальный идентификатор отношения). Мне нужны все здания и прогкоды, связанные с идентификатором отношения в базе данных firebird 2.5, созданной системой ERP моей компании.

Я могу просматривать все таблицы в базе данных firebird и выполнять для них запросы на выборку. Мне нравится думать, что у меня есть синтаксис оператора соединения, и я знаю, как найти уникальный идентификатор, принадлежащий отношению, но, к сожалению, я не уверен, как это сделать. может найти правильную таблицу, содержащую информацию, которую я ищу.

Таблица, думаю, в которой находятся эти данные, имеет следующие поля:

GC_ID, DEVICE_GC_ID, USER_GC_ID, CODE, DESCRIPTION. 

Однако, когда я запрашиваю его, используя

select GC_ID, DEVICE_GC_ID, USER_GC_ID, CODE, DESCRIPTION 
from AT_PROGCODE A 

Затем я получаю описание полей, которые я пытаюсь запросить.

i.e.

| GC_ ID : 100005 | DEVICE_GC_ID : 100174 | USER_GC_ID : 1000073 | DESCRIPTION: >description of what I'm trying to query< |

Может ли кто-нибудь пролить свет на то, как я должен справиться с этим?


Обновление от 09.07.2017

Я поговорил с консультантом по ERP, и мне сказали, какие таблицы мне нужны (если кто-то читает это, использует syntess Atrium; таблица AT_BRENT содержит описание всех таблиц).

Однако я столкнулся с новой проблемой; данные, которые я получаю из моего sql-запроса, продолжают передаваться (кажется, это никогда не заканчивается тем, что я останавливаю скрипт на 90 mil циклах, а программа ERP дает сбой, если я запрашиваю счет).

 select A.GC_OMSCHRIJVING Bedrijf, A.GC_CODE ,M.GC_OMSCHRIJVING Werktitel,  
        M.TELEFOON1, M.TELEFOON2, M.MOBIEL, M.EMAIL, 
        M.URL, M.DOORKIES_NR, M.WERKLOCATIE, M.EMAIL_INTERN 
from    AT_MEDEW M , AT_RELATIE A
JOIN    AT_MEDEW ON A.GC_ID = M.GC_ID
WHERE   M.TELEFOON1 <> '' OR  M.TELEFOON2 <> '' OR M.MOBIEL <> ''

Есть идеи, в чем причина моей последней опасности?


person Zr.Ms. Bruinvis    schedule 29.08.2017    source источник
comment
Мне кажется, что это данные, которые вы запрашиваете, другими словами: результат вашего запроса. Может я не понимаю вопроса. Не могли бы вы добавить определение таблиц и образец данных и ожидаемых результатов. Кроме того, ваш запрос не содержит соединений, так что еще не хватает в вашем вопросе?   -  person Mark Rotteveel    schedule 29.08.2017
comment
Имеет ли указанный OBJECT какую-то уникальную удобочитаемую информацию, такую ​​как уникальное текстовое имя? Одним из возможных способов было бы extract всю базу данных в огромный текстовый файл сценария SQL. Затем искать это имя в файле.   -  person Arioch 'The    schedule 29.08.2017
comment
@Arioch'The, я сомневаюсь, что сам код появится в каком-либо другом месте, кроме этого, так что это возможно, я уже подключил скрипт Python к файлу .fdb. Какой SQL-запрос мне нужно выполнить, чтобы получить все значения? В системе ERP всегда требуется компонент from в запросе.   -  person Zr.Ms. Bruinvis    schedule 30.08.2017
comment
@MarkRotteveel Кажется, я забыл добавить сам оператор соединения, однако он выглядит точно так же, как финальный пример, только в том, что он использует gc_ID от реальных клиентов.   -  person Zr.Ms. Bruinvis    schedule 30.08.2017
comment
Я все еще не понимаю вашей проблемы. Ваш запрос запрашивает идентификаторы, Firebird возвращает эти идентификаторы. Что вы ожидали?   -  person Mark Rotteveel    schedule 30.08.2017
comment
@ Zr.Ms.Bruinvis Zr.Ms.Bruinvis Я не говорил запускать SQL-запрос - я сказал экспортировать всю базу данных в текстовый файл формата языка SQL. И я имел в виду не числовые коды, а уникальные текстовые названия типа Лондона или Берлина   -  person Arioch 'The    schedule 30.08.2017
comment
@MarkRotteveel Мой вопрос заключается в том, как я нахожу запрос sql, необходимый для получения всех зданий и прогкодов, связанных с идентификатором отношения .. Я думал, что у меня есть правильная таблица, но теперь я начинаю в этом сомневаться.   -  person Zr.Ms. Bruinvis    schedule 30.08.2017
comment
@Arioch'Приношу свои извинения, я прочитал ваш ответ как «ЭКСПОРТ», являющийся командой SQL. К сожалению, все прогкоды являются числовыми, но я думаю, что если бы я мог запросить все таблицы, я бы смог найти нужную мне таблицу.   -  person Zr.Ms. Bruinvis    schedule 30.08.2017
comment
Я думаю, вам действительно нужно связаться с поставщиком вашего приложения. Firebird - это общая система управления базами данных, ваш вопрос, похоже, касается особенностей схемы вашего приложения (которое использует Firebird). Без знания этой схемы и приложения трудно (если не невозможно) ответить (или пришлось бы догадываться).   -  person Mark Rotteveel    schedule 30.08.2017
comment
все прогкоды могут быть числовыми, но объекты могут иметь (или не иметь) не только прогкоды, но и некоторые другие уникальные текстовые атрибуты, по которым вы можете осуществлять поиск.   -  person Arioch 'The    schedule 30.08.2017
comment
@MarkRotteveel Я пытался связаться с поставщиком, они сказали, что всю информацию можно просмотреть через средство просмотра базы данных внутри ERP ... там я могу видеть таблицы, представления, процедуры, триггеры, генераторы и объекты индексов. Но это не помогло мне найти конкретные данные, которые я ищу   -  person Zr.Ms. Bruinvis    schedule 31.08.2017
comment
Это прискорбно, но, как я уже сказал, без знания этой конкретной схемы помочь вам будет практически невозможно. И если ваш поставщик не может или не хочет помочь, вы сами по себе. Я могу только предложить вам изучить схему и посмотреть, сможете ли вы вывести какую-либо логику о ее структуре, а затем проверить свои предположения, создав запросы и сравнив их с результатами в самом приложении. Вы также можете попробовать использовать средство трассировки Firebird и проверить, какие запросы генерирует само приложение, и посмотреть, даст ли это вам подсказки о структуре.   -  person Mark Rotteveel    schedule 31.08.2017
comment
@MarkRotteveel, он также может попытаться отследить все поступающие настоящие запросы, например реализовать свою собственную клиентскую библиотеку FB в качестве прокси с ведением журнала или, возможно, используя API трассировки FB 2.5 (например, ib-aid.com/en/hqbird-features ). Затем он может попытаться простоять свою систему несколько минут, затем открыть нужные данные, а когда они загрузятся - остановить отслеживание и посмотреть, какие запросы были выданы в ту же минуту. Проблема: ERP lego, вероятно, будет склоняться к объединению данных всех таблиц внутри клиентского приложения с лишь косвенными намеками на это в самих запросах.   -  person Arioch 'The    schedule 01.09.2017
comment
@Arioch'Вы можете видеть, что он выполняет SQL-запросы, но, очевидно, компания не хотела делиться этими запросами (или это выше уровня заработной платы, необходимого для сотрудника службы поддержки). В любом случае, в понедельник придет консультант. (по не относящейся к делу проблеме) .. тогда я постараюсь задать несколько вопросов на эту тему.   -  person Zr.Ms. Bruinvis    schedule 01.09.2017
comment
Я имел в виду именно просмотр запросов, выполняемых приложением. Но по характеру систем ERP и ORM (интенсивное кэширование, ссылки на данные, закодированные в самой ERP и удаленные из уровня SQL) они, вероятно, будут иметь ограниченную помощь.   -  person Arioch 'The    schedule 01.09.2017
comment
Я поговорил с консультантом и обновил свой вопрос, по крайней мере, сейчас я получаю данные для отображения ... но, похоже, это не заканчивается ... Однако я не совсем уверен, что ошибка на моей стороне. Поскольку данные, которые я получаю, - это информация, которую я ищу   -  person Zr.Ms. Bruinvis    schedule 07.09.2017
comment
В вашем запросе от парня ERP есть CROSS JOIN. Вот почему вы получаете огромное количество результатов. Я думаю, вам нужно начать с изучения SQL и понимания того, как работают JOIN. Это действительно базовые вещи, и вы, кажется, не знаете этого. К сожалению, вам нужно иметь это понимание, чтобы быть в состоянии сделать что-либо. Поскольку мы не в состоянии понять схему БД или то, что вы хотите вернуть, нам будет трудно даже понять, что пытается сделать ваш запрос.   -  person Bacon Bits    schedule 07.09.2017
comment
Я пытаюсь получить поля, которые я связал, A.GC_OMSCHRIJVING, A.GC_CODE, GC_ID (общий ключ) находятся в таблице 1: 'AT_RELATIE', M.GC_ID (общий ключ), M.TELEFOON1, M.TELEFOON2 , M.MOBIEL, M.EMAIL, M.URL, M.DOORKIES_NR, M.WERKLOCATIE, M.EMAIL_INTERN находятся в таблице 2 'AT_MEDEW'... Я не буду претендовать на звание инженера баз данных в ближайшее время, но мне нравится думать Я учусь, как будто теперь я знаю, что такое CROSS JOIN. Спасибо за помощь, бекон   -  person Zr.Ms. Bruinvis    schedule 07.09.2017


Ответы (1)


Сначала мне нужно было найти таблицу AT_BRENT, в которой содержатся все описания таблиц Syntess Atrium.

Затем я использовал CROSS JOIN (как указано https://stackoverflow.com/users/696808/bacon-bits< /а> )

Я закончил тем, что использовал

    select A.GC_OMSCHRIJVING Bedrijf, A.GC_CODE ,M.GC_OMSCHRIJVING Werktitel,  
    M.TELEFOON1, M.TELEFOON2, M.MOBIEL, M.EMAIL, 
    M.URL, M.DOORKIES_NR, M.WERKLOCATIE, M.EMAIL_INTERN 
    from    AT_MEDEW M
    JOIN  AT_RELATIE A ON A.GC_ID = M.GC_ID
    WHERE   M.TELEFOON1 <> '' OR  M.TELEFOON2 <> '' OR M.MOBIEL <> ''

Спасибо всем, кто помог.

person Zr.Ms. Bruinvis    schedule 08.09.2017