Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2009, 15:17   #1
Gromsky
Пользователь
 
Аватар для Gromsky
 
Регистрация: 27.02.2008
Сообщений: 64
Злость Запрос с под...вохом

Помогите пожалуйста в решении такой задачки...
Уменя есть четыре таблички
1 subteach (id, ...)
2 monthload (id, subteach_id, ...)
3 InKeys (id, subteach_id, ...)
4 Tdone (id, subteach_id, ...)

Вот... мне потом нада удалить стрроку в таблице subteach, но нужно проверить нет ли опираюющихся записей на эту строку в хоть какой либо из остальных трех таблиц...
В этом не силен, но вот мой запрос, он не работает...
Код:
SELECT
subteach.id
FROM
subteach,
monthload,
InKeys,
Tdone,
WHERE
subteach.id=monthload.subteach_id
OR
subteach.id=InKeys.subteach_id
OR
subteach.id=TDone.subteach_id
Если проверяю только на счет таблици monthload
Код:
SELECT
subteach.id
FROM
subteach,
monthload
WHERE
subteach.id=monthload.subteach_id
То все работает, но только добавляю в запрос еще таблицу,
Код:
SELECT
subteach.id
FROM
subteach,
monthload,
InKeys
WHERE
subteach.id=monthload.subteach_id
то все - неработает...
Ученье свет, а неученье - чуть свет и на работу
Gromsky вне форума Ответить с цитированием
Старый 27.04.2009, 16:03   #2
wyvern
Форумчанин
 
Аватар для wyvern
 
Регистрация: 24.03.2009
Сообщений: 215
По умолчанию

попробуй так
Код:
SELECT
    s.id
FROM
    subteach s,
    monthload m,
    InKeys i,
    Tdone t
WHERE
    s.id = m.subteach_id
    and s.id = i.subteach_id
    and s.id = t.subteach_id;
wyvern@localhost:~$ sudo emerge --unmerge world
wyvern вне форума Ответить с цитированием
Старый 27.04.2009, 16:09   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
DELETE FROM subteach
  WHERE subteach.id not in (select monthload.subteach_id from monthload)
AND subteach.id not in (select InKeys.subteach_id
 from InKeys)
AND subteach.id not in (select TDone.subteach_id
 from TDone);
p.s. Это азбука... А если бы Вы только представляли, что значит реально вопрос с "подвывертом" в SQL
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.04.2009, 16:14   #4
Gromsky
Пользователь
 
Аватар для Gromsky
 
Регистрация: 27.02.2008
Сообщений: 64
По умолчанию

Цитата:
попробуй так
Код:

SELECT
s.id
FROM
subteach s,
monthload m,
InKeys i,
Tdone t
WHERE
s.id = m.subteach_id
and s.id = i.subteach_id
and s.id = t.subteach_id;
Нет... ксожалению тоже неработает, это собственно идентично тому что я писал...
Ученье свет, а неученье - чуть свет и на работу
Gromsky вне форума Ответить с цитированием
Старый 27.04.2009, 16:21   #5
Gromsky
Пользователь
 
Аватар для Gromsky
 
Регистрация: 27.02.2008
Сообщений: 64
По умолчанию

Цитата:
Код:

DELETE FROM subteach
WHERE subteach.id not in (select monthload.subteach_id from monthload)
AND subteach.id not in (select InKeys.subteach_id
from InKeys)
AND subteach.id not in (select TDone.subteach_id
from TDone);

p.s. Это азбука... А если бы Вы только представляли, что значит реально вопрос с "подвывертом" в SQL
СПАСИБО ОГРОМНОЕ РАБОТАЕТ!!!
Вот только надобы сообщать пользователю, почему не удаляется, что бы он не думал что это глюк
Ученье свет, а неученье - чуть свет и на работу
Gromsky вне форума Ответить с цитированием
Старый 27.04.2009, 16:34   #6
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

кстати говоря, этот запрос удалит ВСЕ записи в табл. subteach, на которые нет ссылок(как минимум неявных) в остальных таблицах запроса

Код:
DELETE FROM subteach
WHERE subteach.id not in (select monthload.subteach_id from monthload)
AND subteach.id not in (select InKeys.subteach_id
from InKeys)
AND subteach.id not in (select TDone.subteach_id
from TDone);

ну и сообщайте
можно вообще взять селектом из каждой таблицы и посчитать число записей с таким айди

Код:
select
   count(m.subteach_id)
+ count(i.subteach_id)
+ count(t.subteach_id) foreign_count
from
    subteach s,
    monthload m,
    InKeys i,
    Tdone t
where 0=0
    and m.subteach_id = s.id
    and i.subteach_id = s.id
    and t.subteach_id = s.id
    and s.id = : pID
а по-хорошему, СУБД за вас сама должна отработать этот случай - только нужно не лениться и при проектировании базы не забывать про ссылочную целостность
soleil@mmc вне форума Ответить с цитированием
Старый 27.04.2009, 16:35   #7
Gromsky
Пользователь
 
Аватар для Gromsky
 
Регистрация: 27.02.2008
Сообщений: 64
По умолчанию

да я подкорректировал чтобы удаляло только то, что нада... но проблема осталась с сообщением пользователю... И может подскажите, где можно прочесть по поводу ссылочной целостности...
Ученье свет, а неученье - чуть свет и на работу
Gromsky вне форума Ответить с цитированием
Старый 27.04.2009, 16:50   #8
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

я же написал запрос, который выдаст общее кол-во ссылок на эту запись

ищи все что пишут про "foreign key"
почитай - наверняка даже здесь написано http://rapidshare.com/files/10347751..._BD_PrRlSpr.7z (книжку взял из списка литературы http://programmersforum.ru/showthread.php?t=14054) или найди Грубера "Понимание SQL"
soleil@mmc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SQL-запрос под Paradox Yurk@ БД в Delphi 1 08.12.2008 05:56
запрос ссылается на несвязанный с ним запрос kolebatel SQL, базы данных 0 11.06.2008 12:50
Программирование под nix Simply-Art Свободное общение 8 20.03.2007 11:45