Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.09;
Скачать: CL | DM;

Вниз

помогите написать запрос и организовать работу с 2-мя таблицами   Найти похожие ветки 

 
Борис ©   (2002-12-15 13:35) [0]

Здравствуйте! Прошу помочь организовать такую связку двух таблиц:
Дано: две таблицы

Таблица 1:
Ключ|Поле1

Таблица 2:
Ключ|Поле1|Поле2

Необходимо вывести в DBGrid
Вывести Таблица1.Ключ, Таблица1.Поле1, вывести значения Таблица2.Поле2 при том, что Таблица1.ключ = Таблица2.Поле1, а если такового нет, вывести 0.

Пример:
Таблица 1:
Ключ|Поле1|
2 1
3 8
4 6

Таблица 2:
Ключ|Поле1|Поле2|
1 1 5
2 2 9


Должно выглядить так:
2 1 1
3 8 0 // В таблице 2 нет поля1 со значением 3 выводим 0
4 6 0 // В таблице 2 нет поля1 со значением 4 значит выводим 0

Так самое главное, как сделать, что если в в таблице2.поле1 небыло подходящего значения, а в DBGrid изменили 0 на что-то, то добавить строчку в Таблица2.

Сказал сложно, но пытался выразить задачу, как мог.

Можно-ли вообще такое сделать???


 
@andrew ©   (2002-12-15 13:54) [1]

Помоему ты все перепутал
но я думаю, что ты имел ввиду:
select table1.key, table1.pole1, table2.pole2 from table1
left join table2 on table2.key = table1.pole

Нет, не то?


 
@andrew ©   (2002-12-15 13:55) [2]

А да, надо подставить ноль, тогда вместо
table2.pole2 - isNULL(table2.pole2, 0)


 
Борис ©   (2002-12-15 13:56) [3]

@andrew
Вы бесспорно правы!
Вот вывели мы это, а как теперь сделать что если в в таблице2.поле1 небыло подходящего значения, а в DBGrid пользователь изменили 0 на что-то, то добавить данную строчку в Таблица2


 
@andrew ©   (2002-12-15 13:59) [4]

Опять очепятка! isNULL(table2.pole2, 0) AS имя поля, напр. pole2

Хотя смысла в этом запросе, помоему, нет :-) Ты точно написал то, что хотел :?)).


 
Борис ©   (2002-12-15 14:08) [5]

@andrew
Надо писать местный склад, где в первой таблице описания элементов, а в других таблицах иные значения.


 
@andrew ©   (2002-12-15 14:14) [6]

Я не знаю - надо думать, но вот один момент: я так понимаю, что таблицы со всязью один-к-одному, иначе все кординально меняетя, а если так - то зачем две таблицы? Ну ладно, надо-значит надо. Хотя если бы было по подробней, то может и решили бы...


 
Борис ©   (2002-12-15 14:19) [7]

@andrew Действительно сейчас это все в одной таблице, но получатеся так, что надо сделать в нескольких (а то получается очень много полей, сейчас уже невлазеем в 255).


 
@andrew ©   (2002-12-15 14:30) [8]

Если ты не хочешь делать отдельную форму для редактирования, а пользоваться стандартными компонентами есть такой вариант:
Ты с ADO работаешь? Ну даже если и нет, думаю все будет o.k.
1. пишешь запрос, потом открываешь редактор полей и добавляешь все поля
2. "этим" :-) полям будет по умолчанию флаг readonly, меняшь его на false и обрабатываешь событие onChange, а лучше даже on SetText, где и генеришь запрос по добавлению нужной строки.
3. делаешь Requery.
Что не понял спрашивай. Желаю удачи.


 
Борис ©   (2002-12-16 10:11) [9]

Запрос сделал. Теперь такой вопрос.
сейчас выбираются все записи из первой таблицы и только те записи из второй, у которых Поле1=Первичному ключу первой таблицы.

select t2.PKey, t1.Pole1, t2.Pole2
from "table1.db" t1 LEFT JOIN "table2.db" t2 ON t1.PKey = t2.Pole1

Сейчас в UpdateSQL написано такой запрос на изменение:

update "table2.db"
set
Pole2 = :Pole2
where
PKey = :OLD_PKey

Но вот возникает проблема, когда мы ставим значение в столбце2 второй таблицы, а фактически-то этой строчки в таблице2 НЕТ (!) (т.к. мы выбирали все из первой и только по условию из второй).

Можно-ли написать запрос в UpdateSQL, что если Pkey нет, то тогда делать Insert, а не Update?


 
Борис ©   (2002-12-16 11:00) [10]

А может все делается гораздо проще?
Что, если воспользоваться Foreign key ?
как я понимаю, он сможет создать для каждой записи Таблица1.Ключ поле Таблица2.Поле1?



Страницы: 1 вся ветка

Текущий архив: 2003.01.09;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.01 c
6-25001
brestmarket
2002-11-09 15:27
2003.01.09
Поиск текста в WebBrowser не работает ?!


1-24877
dimonf
2002-12-28 11:41
2003.01.09
Как програмно вызвать OnKeyDown?


14-25010
Ru
2002-12-19 13:36
2003.01.09
Милиция


1-24878
b-Ars
2002-12-27 14:04
2003.01.09
Возможно ли сделать оптимальней?


1-24836
race1
2002-12-27 11:44
2003.01.09
Косяк