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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2013, 13:55   #1
shefus
 
Регистрация: 11.11.2010
Сообщений: 9
По умолчанию Запрос ... and ...

Есть таблица (2 столбца):

a 14
a 15
a 35
b 15
c 35

Помогите с запросом - нужна выборка - условие по второму столбцу: 15 and 35. В результате должны получить "a".
Спасибо!
shefus вне форума Ответить с цитированием
Старый 13.03.2013, 13:59   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
select поле1 from ... where поле2 in (15,35)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.03.2013, 13:59   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так подойдёт?
Код:
select * from Tablica where Pole2 = 15 
  and Pole1 in (select Pole1 from Tablica where Pole2 = 35)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.03.2013, 14:04   #4
shefus
 
Регистрация: 11.11.2010
Сообщений: 9
По умолчанию

Цитата:
Код:

select поле1 from ... where поле2 in (15,35)
Это не проходит - результат:

A
A
B
C

А нужно - только "А" - B и С не должны попасть в результат.
shefus вне форума Ответить с цитированием
Старый 13.03.2013, 14:08   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
SELECT M.Pole1
  FROM Tablica M
    JOIN Tablica M1 ON M1.Pole1=M.Pole1 AND M1.Pole2=15
    JOIN Tablica M2 ON M2.Pole1=M.Pole1 AND M2.Pole2=35
  GROUP BY M.Kod


SELECT M.Pole1
  FROM Tablica M
  WHERE EXISTS(SELECT * FROM Tablica M1 WHERE M1.Pole1=M.Pole1 AND M1.Pole2=15) AND
        EXISTS(SELECT * FROM Tablica M1 WHERE M1.Pole1=M.Pole1 AND M1.Pole2=35)
  GROUP BY M.Pole1
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.03.2013, 14:08   #6
shefus
 
Регистрация: 11.11.2010
Сообщений: 9
По умолчанию

Цитата:
select * from Tablica where Pole2 = 15
and Pole1 in (select Pole1 from Tablica where Pole2 = 35)
Получилось... Спасибо! А если 3 условия? 15 and 35 and 14 ?
shefus вне форума Ответить с цитированием
Старый 13.03.2013, 14:21   #7
shefus
 
Регистрация: 11.11.2010
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
SELECT M.Pole1
  FROM Tablica M
    JOIN Tablica M1 ON M1.Pole1=M.Pole1 AND M1.Pole2=15
    JOIN Tablica M2 ON M2.Pole1=M.Pole1 AND M2.Pole2=35
  GROUP BY M.Kod


SELECT M.Pole1
  FROM Tablica M
  WHERE EXISTS(SELECT * FROM Tablica M1 WHERE M1.Pole1=M.Pole1 AND M1.Pole2=15) AND
        EXISTS(SELECT * FROM Tablica M1 WHERE M1.Pole1=M.Pole1 AND M1.Pole2=35)
  GROUP BY M.Pole1
Хм... можно не большой комент Что есть M, Tablica M, Tablica M1, Tablica M2, M1, M2 ?
shefus вне форума Ответить с цитированием
Старый 13.03.2013, 14:39   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

M, M1, M2 - псевдонимы таблиц
для 3 и более лучше всего с созданием временной таблицы
Пример для MS SQL
Код:
SELECT 14 AS Pole INTO #Temp
INSERT INTO #Temp SELECT 15
INSERT INTO #Temp SELECT 35

SELECT U.Pole1
  FROM (
    SELECT M.Pole1,M.Pole2
      FROM Tablica M,#Temp T
      WHERE M.Pole2=T.Pole
      GROUP BY M.Pole1,M.Pole2) U
  GROUP BY U.Pole1
  HAVING COUNT(*)=3
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.03.2013, 14:44   #9
shefus
 
Регистрация: 11.11.2010
Сообщений: 9
По умолчанию

Ок. Всем спасибо! Буду пробовать.
shefus вне форума Ответить с цитированием
Старый 13.03.2013, 14:49   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Можно и без временной таблицы, но чем больше к-во значений, тем хуже это будет случая с использованием временной таблицы
Код:
SELECT U.Pole1
  FROM (
    SELECT Pole1,Pole2
      FROM Tablica
      WHERE Pole2 IN (0,1,2)
      GROUP BY Pole1,Pole2) U
  GROUP BY U.Pole1
  HAVING COUNT(*)=3
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос. Wildrover SQL, базы данных 3 29.02.2012 10:44
Запрос на выборку и отчет на этот запрос Camelot_2012 Microsoft Office Access 2 21.12.2011 16:48
Запрос с CASE переделать в запрос с PIVOT (MS SQL Server 2005) Машуля SQL, базы данных 4 06.05.2010 21:09
запрос ссылается на несвязанный с ним запрос kolebatel SQL, базы данных 0 11.06.2008 12:50