Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   помогите сделать запрос. обьединение таблиц в запросе (http://forum.oszone.net/showthread.php?t=126710)

running-frag 22-12-2008 14:52 987121

помогите сделать запрос. обьединение таблиц в запросе
 
есть три таблицы (количество таблиц может варьироваться, но сейчас это не важно, скажем только три) вот стоблцы их (не все) :

1 таблица agt :
agtID
crpID
staID
slrsysID

2 таблица sta :
staID
crpID
slrsysID
constID
regID

3 таблица crp :
crpID
slrsysID


но помимо указаных столбцов есть ещё много других, которые тоже будут, в конечном итоге, участвовать в обработке пхп. но сейчас не об этом. так вот задача такова - выбрать из всех трёх таблиц ВСЕ записи по slrsysID. возможно ли такое сделать? и чем лучше пользоваться. слышал о принцепах JOIN да только не вкурил как сделать сам запрос. т.к. фака подходящего не нашлось. :( с union'ом тоже баловался, только не получилось у меня создать "нужный" мне запрос. :( подскажите плз.

PS: хотелось бы увидеть два варианта. когда едёт "полная выборка". и когда идёт "исключения" если запись есть в другой таблице, вроде "исключения" через JOIN можно делать.
PS2: не бейте сильно если чего "гоню". :)

Delirium 23-12-2008 02:52 987735

running-frag, как я уже не раз советовал, сделайте так:
создайте чистую базу ms access, создайте там 3 ваши таблицы с полями, забейте в них по 2-3 записи.
ПОтом идите в запросы и в конструкторе добавьте ваши таблицы. Экспериментируйте со связями. Потом вид - SQL и увидите свой запрос. Я тоже сейчас покумекаю.
С UNION не получится, т.к. у вас разное количество столбцов в таблицах.

Delirium 23-12-2008 03:11 987743

предварительные тесты показали, что такую выборку сделать скорее всего не получится, т.к. в результирующем запросе выводятся перемноженные строки, т.е. если у меня в первой таблице 2 записи, во второй 3, в третьей 4, то получим на выходе 2*3*4 = 24 строки вместо 9. Попробуйте, может у вас получится что нибудь :)

running-frag 23-12-2008 12:15 987959

Код:

SELECT agt.*, crp.* FROM agt, crp WHERE agt.crpID = '123456' && agt.crpID = crp.crpID
хоть в результате получим несколько одинаковых столбцов, получилось вот так, будем думать дальше как выбрать "без повторений" или "обьеденить" повторяющиеся стоблцы... ^_^

Delirium 24-12-2008 01:07 988612

Цитата:

Цитата running-frag
будем думать дальше как выбрать "без повторений" или "обьеденить" повторяющиеся стоблцы... »

select distinct agt.*, crp.* FROM agt, crp WHERE agt.crpID = '123456' && agt.crpID = crp.crpID
либо
select distinctrow agt.*, crp.* FROM agt, crp WHERE agt.crpID = '123456' && agt.crpID = crp.crpID

running-frag 24-12-2008 11:05 988802

Цитата:

Цитата Delirium
Цитировать »

Цитата:

Цитата Delirium
select distinct agt.*, crp.* FROM agt, crp WHERE agt.crpID = '123456' && agt.crpID = crp.crpID
либо
select distinctrow agt.*, crp.* FROM agt, crp WHERE agt.crpID = '123456' && agt.crpID = crp.crpID »

честно говоря я не увидел вообще никакой разницы что с distinct, что без ... т.е. у меня как выберало два одинаковых столбца (crpID и crpID_1) так и выбирает. почитал фак distinct хорошо работает если есть одна таблица (дев фак ) а вот как это дело сделать с двумя.. =\

PS: в факе есть строка "SELECT DISTINCT t1.a FROM t1, t2 where t1.a=t2.a;" пытался по подобию делать, пока что не получается, у кого есть идеи слушаем.....


Время: 20:09.

Время: 20:09.
© OSzone.net 2001-