Форум: "Базы";
Текущий архив: 2003.01.27;
Скачать: [xml.tar.bz2];
ВнизСлезно молю о помощи. Помогите с создать SQL. Найти похожие ветки
← →
Worker (2003-01-08 11:36) [0]Суть проблемы: необходимо сравнить две модификации техники. Есть две большие таблицы(до 30 тыс.зап.) содержащие детали двух модификаций Tree001 и Tree002 с полями Child(уник.,для TreeView), Parent(для TreeView), NameSys(имя ветви-детали), Obozn(обозначение детали), FNN(имя ветви+обозначение, поле для связи с др. таблицами,т.к. обозначения может не быть). И таблицы для характеристик (они общие) Parts с полями FNNP(имя+обозначение),Har(индекс хар-ки), Znach(значение хар-ки) и таблица самих характеристик Har поля HHar(индекс хар-ки), NameHar(наимен.хар-ки).
Необходимо по выбранной хар-ке(Har.NameHar) или Обозначению(Obozn) или Наименованию(NameSys) сравнить другие характеристики, например Наименование(Tree001.NameSys Tree002.NameSys) или любые другие хар-ки по полю Znach так чтобы в результирующей таблице были бы одинаковые записи, различающися записи, существующие только в Tree001 и существующие только в Tree002.
Понимаю, что может несколько запутанно изложил, прошу извенений, но готов обсудить любые варианты вплоть до перестройки структуры базы. Помогите пожалуйста.
← →
Mike Kouzmine (2003-01-08 14:24) [1]Напиши кратко структуру файлов и по каким поля надо их связывать, и что ты хочешь получить на выходе.
← →
Worker (2003-01-08 16:16) [2]Таблица Tree001 поля Child(A)-ключ, Parent(A), NameSys(A), Obozn(A), FNN(A), то же для Tree002.
Таблица Parts поля FNNP(A) связано с Tree001.FNN и Tree002.FNN, Har(I), Znach(A).
Таблица Har поля HHar(I) связано с Parts.Har, NameHar(A).
Таблицы Parts и Har общие для всех модификаций.
Юзер выбирает по какому параметру будет идти сравнение(это может быть NameSys,Obozn или либая хар-ка Har.NameHar) и какие поля выводить для просмотра значений(это может быть NameSys,Obozn или либая хар-ка Har.NameHar).
В итоге в самом простом варианте должна получиться таблица из трех полей, первое: поле по которому производится сравнение, второе и третье - сравниваемые поля.
Например сравниваем по полю Obozn вывести надо поля Tree001.NameSys и Tree002.NameSys. Тогда в первой колонке должны быть все обозначения(Obozn) из Двух таблиц Tree001 и Tree002, а во второй и третьей Tree001.NameSys и Tree002.NameSys. Одно из полей Tree001.NameSys или Tree002.NameSys может быть пустым.
← →
Delirium^.Tremens (2003-01-08 16:22) [3]:-) И первый и второй пост по 14 строк :-) (о краткости)
← →
ZeroDivide (2003-01-08 16:45) [4]Слушай, а каким компонентом ты с Paradoxom работаешь?
← →
MsGuns (2003-01-08 17:14) [5]
SELECT T1.Obozn, T1.NameSys N1, T2.NameSys N2
FROM Tree001 T1, Tree002 N2
WHERE (T1.Obozn=T2.Obozn) AND (T1.Obozn="Какая-то деталь")
ORDER BY T1.Obozn, N1, N2
Оно ?
← →
Worker (2003-01-08 19:34) [6]>ZeroDivide
>Слушай, а каким компонентом ты с Paradoxom работаешь?
TQuery
← →
Worker (2003-01-08 19:50) [7]>MsGuns
Нет не оно потому, что условие T1.Obozn="Какая-то деталь" не может присутствовать, т.к нужны вообще все детали(без повторов), а не конкретная.
← →
Worker (2003-01-08 19:57) [8]Главная задача не в сравнении(Grid автоматом красит различающиеся поля), а в получении ВСЕХ записей из двух таблиц и если есть одинаковые записи, то выводим только одну.
← →
Геннадий (2003-01-08 20:27) [9]2 Worker
Извини, что не догнал твой вопрос - а ты не мог бы привести пример? Есть такие-то данные (пару строчек), делаем сравнение по вот такому критерию, а на выходе должно получиться вот так.
← →
MsGuns (2003-01-08 20:49) [10]SELECT DISTINCT T1.Obozn, T1.NameSys N1, T2.NameSys N2
FROM Tree001 T1, Tree002 N2
WHERE T1.Obozn=T2.Obozn
ORDER BY T1.Obozn, N1, N2
Даст все уникальные по Obozn записи, присутствующие в обеих таблицах
← →
Worker (2003-01-08 21:04) [11]Упростим вопрос, вот запросы:
Записи которых нет в Tree002
SELECT Tree001.Obozn, Tree001.NameSys
FROM Tree001
WHERE NOT EXISTS (SELECT Tree002.Obozn FROM Tree002
WHERE Tree001.Obozn=Tree002.Obozn)
Записи которых нет в Tree001
SELECT Tree002.Obozn, Tree002.NameSys
FROM Tree002
WHERE NOT EXISTS (SELECT Tree001.Obozn FROM Tree001
WHERE Tree002.Obozn=Tree001.Obozn)
Одинаковые записи
SELECT Obozn, Tree001.NameSys, Tree002.NameSys
FROM Tree001, Tree002
WHERE Tree002.Obozn=Tree001.Obozn
Можно ли все это сделать одним запросом или хотя бы двумя и чтобы SELECT был вида
SELECT Obozn, Tree001.NameSys, Tree002.NameSys.
← →
Worker (2003-01-08 21:08) [12]Извиняюсь забыл:
Одинаковые записи
SELECT DISTINCT Obozn, Tree001.NameSys, Tree002.NameSys
FROM Tree001, Tree002
WHERE Tree002.Obozn=Tree001.Obozn
← →
MsGuns (2003-01-08 21:14) [13]>Worker (08.01.03 21:04)
Поставь UNION, но надо позаботиться об "идентификаторе" группы, т.е. доп. поле, которое бы содержало одно из трех значений:
- есть только в 1-м
- есть только в 2-м
- есть и в 1-м и во 2-м
← →
TTCustomDelphiMaster (2003-01-08 21:21) [14]Так что-ли?
SELECT T1.Ob, T1.Name, T2.Name
FROM "C:\\t1.db" T1
LEFT OUTER JOIN "C:\\t2.db" T2
ON (T1.Ob = T2.Ob)
union
SELECT T2.Ob, T1.Name, T2.Name
FROM "C:\\t2.db" T2
LEFT OUTER JOIN "C:\\t1.db" T1
ON (T2.Ob = T1.Ob)
← →
Worker (2003-01-09 10:14) [15]Точно так. Спасибо огромное.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.01.27;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c