![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Слезно молю о помощи. Помогите с создать SQL. [D5, Paradox]
Worker © (2003-01-08 11:36:00)Суть проблемы: необходимо сравнить две модификации техники. Есть две большие таблицы(до 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.
Понимаю, что может несколько запутанно изложил, прошу извенений, но готов обсудить любые варианты вплоть до перестройки структуры базы. Помогите пожалуйста.
Worker (2003-01-09 10:14:00) [1]Точно так. Спасибо огромное.
TTCustomDelphiMaster (2003-01-08 21:21:00) [2]Так что-ли?
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)
MsGuns (2003-01-08 21:14:00) [3]>Worker (08.01.03 21:04)
Поставь UNION, но надо позаботиться об "идентификаторе" группы, т.е. доп. поле, которое бы содержало одно из трех значений:
- есть только в 1-м
- есть только в 2-м
- есть и в 1-м и во 2-м
Worker (2003-01-08 21:08:00) [4]Извиняюсь забыл:
Одинаковые записи
SELECT DISTINCT Obozn, Tree001.NameSys, Tree002.NameSys
FROM Tree001, Tree002
WHERE Tree002.Obozn=Tree001.Obozn
Worker (2003-01-08 21:04:00) [5]Упростим вопрос, вот запросы:
Записи которых нет в 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.
MsGuns (2003-01-08 20:49:00) [6]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 записи, присутствующие в обеих таблицах
Геннадий (2003-01-08 20:27:00) [7]2 Worker
Извини, что не догнал твой вопрос - а ты не мог бы привести пример? Есть такие-то данные (пару строчек), делаем сравнение по вот такому критерию, а на выходе должно получиться вот так.
Worker (2003-01-08 19:57:00) [8]Главная задача не в сравнении(Grid автоматом красит различающиеся поля), а в получении ВСЕХзаписей из двух таблиц и если есть одинаковые записи, то выводим только одну.
Worker (2003-01-08 19:50:00) [9]>MsGuns
Нет не оно потому, что условие T1.Obozn="Какая-то деталь" не может присутствовать, т.к нужны вообще все детали(без повторов), а не конкретная.
Worker (2003-01-08 19:34:00) [10]>ZeroDivide
>Слушай, а каким компонентом ты с Paradoxom работаешь?
TQuery
MsGuns (2003-01-08 17:14:00) [11]
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
Оно ?
ZeroDivide (2003-01-08 16:45:00) [12]Слушай, а каким компонентом ты с Paradoxom работаешь?
Delirium^.Tremens (2003-01-08 16:22:00) [13]:-) И первый и второй пост по 14 строк :-) (о краткости)
Worker (2003-01-08 16:16:00) [14]Таблица 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 может быть пустым.
Mike Kouzmine (2003-01-08 14:24:00) [15]Напиши кратко структуру файлов и по каким поля надо их связывать, и что ты хочешь получить на выходе.