Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Можно ли сделать такой запрос, не знаю, как такое называется 
:(
    Опции темы
RockClimber
Дата 26.6.2008, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре

Репутация: нет
Всего: 15



Есть таблицы:

Таблица1                  Таблица2
Поле1     Поле2   Поле3    Поле1     Поле2     Поле3
Иванов     1      2       1         1        2
Петров     2      5       1         2        4
Сидоров    3      2       1         3        2
Санчес     1      2       2         1        2

Есть запрос:
Код

select Таблица1.Поле1 from Таблица1, Таблица2
Where Таблица1.Поле2 = Таблица2.Поле2 and Таблица1.Поле3 = Таблица2.Поле3 and Таблица2.Поле1 = 1

Результат будет:
Поле1
Иванов
Сидоров


Теперь что я хочу сделать:
Допустим, в Таблице2 в Поле3 стоит "all". Тогда, если выполняется условие 
Код
Таблица2.Поле3 = all and Таблица2.Поле1 = 1
 запрос должен работать как
Код

select Таблица1.Поле1 from Таблица1, Таблица2
Where Таблица1.Поле2 = Таблица2.Поле2 and Таблица2.Поле1 = 1

т. е. из запроса пропадает проверка Поля3 обеих таблиц... Ну или как-то так.
Результат, следовательно, будет:
Поле1
Иванов
Петров
Сидоров

Такое возможно? Допустимо использовать дополнительные поля.


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
Akina
Дата 26.6.2008, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Строишь конструкцию типа
Код

(IF (Таблица2.Поле3 = 'all') THEN True ELSE (Таблица1.Поле3 = Таблица2.Поле3) END)

Как именно она будет выглядеть - зависит от диалекта. БД.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
RockClimber
Дата 26.6.2008, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре

Репутация: нет
Всего: 15



Я правильно понял, что эту конструкцию надо использовать так:
Запрос 
Код

select Таблица1.Поле1 from Таблица1, Таблица2
Where Таблица1.Поле2 = Таблица2.Поле2 and Таблица1.Поле3 = Таблица2.Поле3 and Таблица2.Поле1 = 1

Переписать как:
Код

select Таблица1.Поле1 from Таблица1, Таблица2
Where Таблица1.Поле2 = Таблица2.Поле2 and 
(IF (Таблица2.Поле3 = 'all') THEN True ELSE (Таблица1.Поле3 = Таблица2.Поле3) END) 
and Таблица2.Поле1 = 1
?

Добавлено через 9 минут и 2 секунды
Забыл сказать - база Postgre. Выдает ошибку синтаксиса около THEN...


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
Deniz
Дата 26.6.2008, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 6
Всего: 44



Код
select Таблица1.Поле1 from Таблица1, Таблица2
Where (Таблица1.Поле2 = Таблица2.Поле2)
  and ((Таблица1.Поле3 = Таблица2.Поле3) or (Таблица2.Поле3 = 'all'))
  and (Таблица2.Поле1 = 1)



--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
RockClimber
Дата 26.6.2008, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре

Репутация: нет
Всего: 15



Deniz, хорошая идея, кстати, я что-то уже сам мебя перехитрил... Но все равно не работает, я сделал маленькую тестовую базу в Аксессе... Дома вечером буду разбираться...


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
morpheyushka
  Дата 26.6.2008, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зеленый человек
**


Профиль
Группа: Участник
Сообщений: 563
Регистрация: 26.2.2008
Где: Киев

Репутация: нет
Всего: 8



А как на счёт оператора UNION. Правда кое что нужно учитывать:
Цитата(SQL_в примерах_и_задачах)

Использование оператора UNION возможно только при
объединении запросов, соответствующие столбцы которых со-
вместимы по объединению, то есть соответствующие числовые
поля должны иметь полностью совпадающие тип и размер,
символьные поля должны иметь точно совпадающее количест-
во символов. Если NULL-значения запрещены для столбца хотя
бы одного любого подзапроса объединения, то они должны
быть запрещены и для всех соответствующих столбцов в других
подзапросах объединения.


Это сообщение отредактировал(а) morpheyushka - 26.6.2008, 14:57


--------------------
user posted image
Спасибо делается вот так!!!
PM MAIL WWW   Вверх
Magnifico
Дата 26.6.2008, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 23.1.2008
Где: Московская област ь

Репутация: 4
Всего: 17



первый пост:
Цитата
Результат будет:
Поле1
Иванов
Сидоров

результат будет:
Поле1
Иванов
Сидоров
Санчес
а в остальном 5 раз перчитал так и не понял суть вопроса!

2 morpheyushka 
Цитата

А как на счёт оператора UNION. Правда кое что нужно учитывать:Цитата(SQL_в примерах_и_задачах)


-----субд Postgresql 8.3--------
Код

create temporary table t1
(
a integer  null
)
----------------------------
create temporary table t2
(
b float not null
)
---------------------------
insert into t1
select 1 union all
select 2  union all
select null
---------------------------
insert into t2
select 1.1 union all
select 2.2
----------------------------
select a from t1
union 
select b from t2
---------------------------
drop table t1
drop table t2


результат:
Цитата

1
1.1
2
2.2



Это сообщение отредактировал(а) Magnifico - 26.6.2008, 21:02


--------------------
Всё  в  порядке   -   спасибо  зарядке  !
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0580 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.