![]() |
|
Модераторы: skyboy |
![]()
|
|
| izOne |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 232 Регистрация: 22.8.2003 Где: Украина, Киев Репутация: нет Всего: 4 |
Сильно прощенный вариант:
1-я таблица oid date state ----------------------------- 1 2006-01-01 active 2 2006-01-01 hidden 3 2006-01-01 hidden 4 2006-01-01 deleted 2-я oid pid string text integer ---------------------------------------------------------- 1 2 стр3ка текст1 0 1 4 NULL NULL 45 2 2 с2тр5ка текст2 0 2 4 NULL NULL 60 3 2 стр текст3 0 3 4 NULL NULL 10 ---------------------------------------------------------- Задача: выбрать из t1 строки в которых state = (active|hidden) причем для выбранных oid во второй таблице для pid=2 в колонке string должна встечаться строка "стр", а для pid=4 такого же oid - integer >= 20 Помогите пожалуйста. --------------------
Успех ждет каждого, но иногда всю жизнь. |
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 21 Всего: 73 |
Не проверял:
-------------------- Теперь при чем :P |
|||
|
||||
| izOne |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 232 Регистрация: 22.8.2003 Где: Украина, Киев Репутация: нет Всего: 4 |
Ignat
с первой таблицы, в принципе все ясно, а вот со второй....
мне кажеться(не проверял), что это накладывает условия или-или, а надо и-и. Причем если OR заменить на AND, то будет проверять текущая строка второй таблицы на соответствие двум условиям `pid`=2 AND `pid`= 4 - false, т.к. уникальный ключ на oid и pid второй таблицы... Добавлено @ 19:10 Хм... а если сделать так:
то как сильно будет напрягаться сервер если `t2` будет INNER JOIN например 25 раз? --------------------
Успех ждет каждого, но иногда всю жизнь. |
||||
|
|||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 21 Всего: 73 |
izOne, здесь предикаты для второй таблицы разбиты на две ветки, в каждой из них условие "И", т.к.pid не может быть одновременно 2 и 4, то связываем ветви логикой "ИЛИ".
Проверь, пожалуйста, если не работает, значит я тебя не понял. -------------------- Теперь при чем :P |
|||
|
||||
| izOne |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 232 Регистрация: 22.8.2003 Где: Украина, Киев Репутация: нет Всего: 4 |
Вот такая тестовая табличка:
Такой запрос:
В результате остается только oid=5 Ignat
Выдает 8 строк, т.е. не то что хотелось. Может я неправильно что-то сделал??? Хотелось бы, конечно, с минимальным количеством join'ов... --------------------
Успех ждет каждого, но иногда всю жизнь. |
||||||
|
|||||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 21 Всего: 73 |
А какие строки он должен выбрать, если говорить о тестовой табличке. На мой взгляд выбирается все, что нужно. -------------------- Теперь при чем :P |
|||
|
||||
| izOne |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 232 Регистрация: 22.8.2003 Где: Украина, Киев Репутация: нет Всего: 4 |
Ignat
Должна быть одна строка с oid=5 кот. удовлетворяет всем условиям. Добавлено @ 15:33 а так в результате есть, например, oid=1 у которго 1. integer < 15 (pid=2) 2. string = 'bad' (pid=1) --------------------
Успех ждет каждого, но иногда всю жизнь. |
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 21 Всего: 73 |
Теперь я понял, что надо.
-------------------- Теперь при чем :P |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |