Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вроде и не сложный запрос, а AND/OR для условия не могу поставить толком  [new]
viktor zelenin
Member

Откуда:
Сообщений: 185
Скажите. как правильно условие WHERE выставить, чтобы получить то что мне надо, ничего не понимаю, то выдаёт всё что не нужно, то ничего не выдаёт.
В общем есть таблица:
id	id_subj	id_property	value
1 1 1 'железный'
2 1 2 'шар'
3 2 1 'железный'
4 2 2 'куб'
5 3 1 'деревянный'
6 3 2 'шар'

ну вот мне надо найти только те сущности, кто шар и кто железный.
а если делаю так:
where (id=1 and value='железный') and (id=2 and value='шар'),
то ничего не выдаёт!
а если
where (id=1 and value='железный') or (id=2 and value='шар'),
то выдаёт и первую сущность и вторую...
короче неправильно.
мне надо конкретно получить для железного шара id_subj = 1

скажите, как условие выправить?!
10 ноя 09, 00:12    [7905276]     Ответить | Цитировать Сообщить модератору
 Re: Вроде и не сложный запрос, а AND/OR для условия не могу поставить толком  [new]
Pvase
Member

Откуда:
Сообщений: 982
viktor zelenin
Скажите. как правильно условие WHERE выставить, чтобы получить то что мне надо, ничего не понимаю, то выдаёт всё что не нужно, то ничего не выдаёт.
В общем есть таблица:
id	id_subj	id_property	value
1 1 1 'железный'
2 1 2 'шар'
3 2 1 'железный'
4 2 2 'куб'
5 3 1 'деревянный'
6 3 2 'шар'

ну вот мне надо найти только те сущности, кто шар и кто железный.
а если делаю так:
where (id=1 and value='железный') and (id=2 and value='шар'),
то ничего не выдаёт!
а если
where (id=1 and value='железный') or (id=2 and value='шар'),
то выдаёт и первую сущность и вторую...
короче неправильно.
мне надо конкретно получить для железного шара id_subj = 1

скажите, как условие выправить?!


SELECT * FROM Table AS T1 WHERE T1.VALUE = 'железный' AND T1.id_subj IN (SELECT T2.id_subj FROM Table AS T2 WHERE T2.VALUE = 'шар')
10 ноя 09, 00:46    [7905343]     Ответить | Цитировать Сообщить модератору
 Re: Вроде и не сложный запрос, а AND/OR для условия не могу поставить толком  [new]
Ivan TB
Member

Откуда:
Сообщений: 90
where (id=1 and value='железный') or (id=2 and value='шар')
group by id_subj
having count(*) = 2
10 ноя 09, 00:50    [7905349]     Ответить | Цитировать Сообщить модератору
 Re: Вроде и не сложный запрос, а AND/OR для условия не могу поставить толком  [new]
viktor zelenin
Member

Откуда:
Сообщений: 185
Pvase
SELECT * FROM Table AS T1 WHERE T1.VALUE = 'железный' AND T1.id_subj IN (SELECT T2.id_subj FROM Table AS T2 WHERE T2.VALUE = 'шар')

так, а скажите, а если пропертиев больше чем 2 будет? например, ещё id_property=3 и values in ('новый','старый') то как докидывать это в условие?


Ivan TB
where (id=1 and value='железный') or (id=2 and value='шар')
group by id_subj
having count(*) = 2


а что having делает? по этой аналогии можно ли по свойствам отбирать записи, если свойств у сабжа будет больше 2-х? т.е. типа,
where (id=1 and value='железный') or (id=2 and value='шар') or (id=3 and value='новый')
group by id_subj
having count(*) = 3
,
то 3 надо указывать?
10 ноя 09, 00:59    [7905365]     Ответить | Цитировать Сообщить модератору
 Re: Вроде и не сложный запрос, а AND/OR для условия не могу поставить толком  [new]
Ivan TB
Member

Откуда:
Сообщений: 90
viktor zelenin
по этой аналогии можно ли по свойствам отбирать записи, если свойств у сабжа будет больше 2-х? т.е. типа,
where (id=1 and value='железный') or (id=2 and value='шар') or (id=3 and value='новый')
group by id_subj
having count(*) = 3
,
то 3 надо указывать?

Да.
10 ноя 09, 01:03    [7905371]     Ответить | Цитировать Сообщить модератору
 Re: Вроде и не сложный запрос, а AND/OR для условия не могу поставить толком  [new]
qwrqwr
Member

Откуда: Msk
Сообщений: 1684
так еще можно с возможностью расширения числа вложений:
where case when (id=1 and value='железный') 
           then case when (id=2 and value='шар') 
                     then case when (id=3 and value='новый')
                               then 1 else 0 end
                     else 0 end
           else 0 end 
      = 1
10 ноя 09, 01:37    [7905402]     Ответить | Цитировать Сообщить модератору
 Re: Вроде и не сложный запрос, а AND/OR для условия не могу поставить толком  [new]
iljy
Member

Откуда:
Сообщений: 8711
qwrqwr
так еще можно с возможностью расширения числа вложений:
where case when (id=1 and value='железный') 
           then case when (id=2 and value='шар') 
                     then case when (id=3 and value='новый')
                               then 1 else 0 end
                     else 0 end
           else 0 end 
      = 1

приведите пример данных (id,value), удовлетворяющих этому условию.
10 ноя 09, 01:45    [7905410]     Ответить | Цитировать Сообщить модератору
 Re: Вроде и не сложный запрос, а AND/OR для условия не могу поставить толком  [new]
qwrqwr
Member

Откуда: Msk
Сообщений: 1684
тьфу, для такой структуры не подойдет - извините.
10 ноя 09, 01:45    [7905413]     Ответить | Цитировать Сообщить модератору
 Re: Вроде и не сложный запрос, а AND/OR для условия не могу поставить толком  [new]
viktor zelenin
Member

Откуда:
Сообщений: 185
спасибо большое.
всё случилось!

а как немного усложнить запрос можно? чтобы значения могли отбираться из другой таблицы значений?
каламбур? извините, сейчас покажу:
помимо, одной таблицы:
id	id_subj	id_property	value
1 1 1 'железный'
2 1 2 'шар'
3 2 1 'железный'
4 2 2 'куб'
5 3 1 'деревянный'
6 3 2 'шар'

есть ещё одна: etalon
id_etalon	id_property	value
1 1 'железный'
1 2 'шар'
2 1 'железный'
2 2 'куб'
3 1 'деревянный'
3 2 'шар'

вот, и мне для условия, надо указывать не вручную значения, как здесь:
where (id=1 and value='железный') or (id=2 and value='шар')
group by id_subj
having count(*) = 2

а с указанием, мол, отобрать записи согласно всем значениям равным из эталонной таблицы по номеру id_etalon.
т.е. чтото наподобие:
select from t where 'all properties равны пропертиям из таблицы etalon, где id_etalon=1'
и по сути я должен получить тоже самое что и при ручном внесении значений.
насколько тяжело такое реализовать? если кто не спит, подсобите.
10 ноя 09, 02:13    [7905432]     Ответить | Цитировать Сообщить модератору
 Re: Вроде и не сложный запрос, а AND/OR для условия не могу поставить толком  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
qwrqwr
тьфу, для такой структуры не подойдет - извините.
Приведите пример структуры, для которой подойдёт
10 ноя 09, 09:00    [7905616]     Ответить | Цитировать Сообщить модератору
 Re: Вроде и не сложный запрос, а AND/OR для условия не могу поставить толком  [new]
viktor zelenin
Member

Откуда:
Сообщений: 185
iap, а у меня сложная задача, которую я попросил последнюю?
просто хотя бы скажите она геморная или нет. если да, буду руками заполнять тогда значения.
10 ноя 09, 11:01    [7906227]     Ответить | Цитировать Сообщить модератору
 Re: Вроде и не сложный запрос, а AND/OR для условия не могу поставить толком  [new]
iljy
Member

Откуда:
Сообщений: 8711
viktor zelenin
iap, а у меня сложная задача, которую я попросил последнюю?
просто хотя бы скажите она геморная или нет. если да, буду руками заполнять тогда значения.

недавно совсем похожая тема была.
select id_subj from
Table t join etalon e on t.id_property = e.id_property and e.value = t.value
where id_etalon = @id_etalon
group by id_subj
having count(*) = (select count(*) from etalon where id_etalon = @id_etalon)
10 ноя 09, 12:10    [7906877]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить