PDA

Показать полную графическую версию : помогите сделать запрос. обьединение таблиц в запросе


running-frag
22-12-2008, 14:52
есть три таблицы (количество таблиц может варьироваться, но сейчас это не важно, скажем только три) вот стоблцы их (не все) :

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

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

running-frag
23-12-2008, 12:15
SELECT agt.*, crp.* FROM agt, crp WHERE agt.crpID = '123456' && agt.crpID = crp.crpID

хоть в результате получим несколько одинаковых столбцов, получилось вот так, будем думать дальше как выбрать "без повторений" или "обьеденить" повторяющиеся стоблцы... ^_^

Delirium
24-12-2008, 01:07
будем думать дальше как выбрать "без повторений" или "обьеденить" повторяющиеся стоблцы... »
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
Цитировать »
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 хорошо работает если есть одна таблица (дев фак (http://dev.mysql.com/doc/refman/5.0/en/distinct-optimization.html) ) а вот как это дело сделать с двумя.. =\

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




© OSzone.net 2001-2012