2016-07-27 4 views
2
ID  ATTRID VALSTR 
1771373  1   1234 
1771373  3   510 
1771373  7   2016 
1771373  8   05 
1777623  3   5003 
1777623  7   2016 
1777623  8   05 
1778103  3   520 
1778103  7   2016 
1778103  8   06 

Я хочу, чтобы выбрать только три условиюКак написать запрос выбора, который обеспечивает все три условия?

AttrId = 3 AND ValStr = 510 
AttrId = 7 AND ValStr = 2016 
AttrId = 8 AND ValStr = 05 

Мой запрос, как это, но запрос возвращает все идентификаторы

SELECT * 
FROM Table 
WHERE ((AttrID = 3 AND ValStr ='510') OR 
     (AttrID = 7 AND ValStr ='2016') OR 
     (AttrID = 8 AND ValStr ='05') 
    ) AND 
     DefID = 1375552 

Я хочу, чтобы отобразить результаты, которые предусмотрены все три условия. Для моего примера, я должен отображать идентификатор 1771373, но без кондиционирования какого-либо идентификатора. Можете ли вы мне помочь?

+2

Где 'DefId' в данном образце? –

+1

Можете ли вы предоставить ожидаемый результат на основе ваших данных выборки – TheGameiswar

+0

Я забыл набрать то же самое для всех строк –

ответ

5

Вы можете использовать предложение HAVING.

Этот запрос будет использовать производную таблицу, содержащую только ID, что ответить всех три условия:

SELECT t.* FROM YourTable t 
INNER JOIN(SELECT s.Id FROM YourTable s 
      WHERE (s.AttrID = 3 AND s.ValStr ='510') OR 
       (s.AttrID = 7 AND s.ValStr ='2016') OR 
       (s.AttrID = 8 AND s.ValStr ='05') 
      GROUP BY s.Id 
      HAVING COUNT(distinct s.AttrID) = 3) t2 
ON(t.id = t2.id) 
+0

Я все равно не работаю по вашему запросу –

+0

Попробуйте прямо сейчас @ FikretSavaş – sagi

+0

Да много благодарен –

1

попробовать это,

select id from YourTable 
where ((AttrID = 3 AND ValStr ='510') OR 
     (AttrID = 7 AND ValStr ='2016') OR 
     (AttrID = 8 AND ValStr ='05') 
    ) 
group by id having count(*)=3 
Смежные вопросы