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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выборка по нескольким значениям из одного поля 
:(
    Опции темы
Serebrus
Дата 19.5.2011, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 333
Регистрация: 22.5.2007
Где: Ташкент

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



Привет всем.
Есть две таблицы: основной и подчиненный (как обычно).
Первый table1
id | full_name
____________
1 | tovar1
2 | tovar2
3 | tovar3
4 | tovar4
5 | tovar5

Второй table2
id | buyer_id | t_count | t_id
________________________
1 |     1        |    10     |  1
2 |     1        |    15     |  2
3 |     1        |    10     |  4
4 |     2        |    30     |  2
5 |     2        |    30     |  4
6 |     3        |    20     |  4
...
Надо составить список покупателей, тех кто купили выбранные пользователем товары
Для этого:
Код

select * from table2 where t_id=2 and t_id=4 --Это при выборе 2- и 4-товара

но этот селект не дает результат (т.е. пустой)
в чем может быть проблема?
PM MAIL   Вверх
Zloxa
Дата 19.5.2011, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

Репутация: 10
Всего: 161



Вы подумайте как товар одновременно может быть апельсином и абрикосом?  Это ведь абсурдно.
Вам нужно выбрать товары елси они являются апельсинами или абрикосами.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 19.5.2011, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Serebrus @  19.5.2011,  09:37 Найти цитируемый пост)
в чем может быть проблема? 

В голове. Твой запрос делает вовсе не то, что ты хочешь. Он пытается найти строку, в которой t_id равно и 2, и 4, причём ОДНОВРЕМЕННО.

Цитата(Serebrus @  19.5.2011,  09:37 Найти цитируемый пост)
Надо составить список покупателей, тех кто купили выбранные пользователем товары

Эту фразу можно интерпретировать как минимум двумя принципиально разными способами.
Сформулируй так, чтобы не осталось неоднозначности.


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

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 333
Регистрация: 22.5.2007
Где: Ташкент

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



Да, вы правы, как написать селект правильно?
Если пользоваться IN, то в результат этого селекта добавится и пользователь под номером 3, т.е. если:
Код

select * from table2 where t_id in (2,4) --Это при выборе 2- и 4-товара

PM MAIL   Вверх
Akina
Дата 19.5.2011, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Serebrus @  19.5.2011,  09:48 Найти цитируемый пост)
как написать селект правильно?

Читать умеешь? перечитай ещё раз:

Цитата(Akina @  19.5.2011,  09:46 Найти цитируемый пост)
Эту фразу можно интерпретировать как минимум двумя принципиально разными способами.
Сформулируй так, чтобы не осталось неоднозначности. 




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

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 333
Регистрация: 22.5.2007
Где: Ташкент

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



если все знают все (а такое вообще не реально, кроме БОГа), то зачем тогда форум, люди заходят узнать то что не знают, все же не такие как Вы Akina, зачем такие слова

Если знаете решение, то помогите пожалуйста, если нет то ...
PM MAIL   Вверх
Akina
Дата 19.5.2011, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Serebrus @  19.5.2011,  12:12 Найти цитируемый пост)
Если знаете решение, то помогите пожалуйста

Я не знаю задачи. Вы её сформулировать однозначно до сих пор не удосужились. Хотя я уже перестал просить Вас сделать это в форме вежливой, и начал - в грубой.
Если формулировки задачи так и не последует - ждите того, кто согласен гадать на кофейной гуще и предлагать варианты в надежде, что один из них окажется тем, что нужен.


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

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 333
Регистрация: 22.5.2007
Где: Ташкент

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



А что имеено Вам не понятно, мне надо список тех людей, кто одновременно купил и товар1, товар2,...
В программе список всех товаров (в CheckListBox), вы выбираете хотя бы один товар, а программа должна вам дать список, кто купил выбранный или выбранные вами товары.
PM MAIL   Вверх
Akina
Дата 19.5.2011, 14:58 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Serebrus @  19.5.2011,  13:01 Найти цитируемый пост)
мне надо список тех людей, кто одновременно купил и товар1, товар2,...

О! уже лучше... Рассказываю по шагам.

Вариант первый, тривиальный.

Берём и получаем список тех, кто покупал товар t_id=2
Код

select buyer_id from table2 where t_id=2

Анальногично тех, кто покупал товар t_id=4
Код

select buyer_id from table2 where t_id=4

Теперь выбираем тех, кто фигурирует и в том, и в другом списке
Код

select q1.buyer_id
from
(
select t1.buyer_id from table2 t1 where t1.t_id=2
) q1
join
(
select t2.buyer_id from table2 t2 where t2.t_id=4
) q2
on q1.buyer_id=q2.buyer_id


Или более сложный, но и более универсальный, вариант логики:

Выбираем всех, кто покупал товары 2 или 4
Код

select distinct buyer_id, t_id from table2 where t_id in (2,4)


Выбираем тех, кто в полученном списке фигурирует дважды

Код

select q1.buyer_id
from
(
  select distinct t1.buyer_id, t1.t_id from table2 t1 where t1.t_id in (2,4)
) q1
group by q1.buyer_id
having count (q1.t_id)=2



Это сообщение отредактировал(а) Akina - 19.5.2011, 15:16


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

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


Чо?
****


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

Репутация: 10
Всего: 161



Цитата(Akina @  19.5.2011,  14:58 Найти цитируемый пост)
select q1.buyer_id
from
(
select t1.buyer_id from table2 t1 where t1.t_id=2
) q1
join
(
select t2.buyer_id from table2 t2 where t2.t_id=2
) q2
on q1.buyer_id=q2.buyer_id

 smile 
Код

select distinct t1.buyer_id
from  table2 t1, table2 t2
where t1.buyer_id=t2.buyer_id
   and t1.t_id=2
   and t2.t_id=2


Это сообщение отредактировал(а) Zloxa - 19.5.2011, 15:09


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 19.5.2011, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



ВНИМАНИЕ! код в сообщении исправлен!

Zloxa, ты фактически выполнил работу парсера и оптимизатора smile 


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

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




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


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

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