Форум: "Базы";
Текущий архив: 2003.01.09;
Скачать: [xml.tar.bz2];
Внизпомогите написать запрос и организовать работу с 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c