IN(1,2), только чтобы и 1 и 2

  • Автор темы Автор темы clevel
  • Дата начала Дата начала

clevel

Новичок
IN(1,2), только чтобы и 1 и 2

CREATE TABLE test (
a tinyint(4) NOT NULL default '0',
b tinyint(4) NOT NULL default '0',
KEY a (a,b)
) TYPE=MyISAM;

INSERT INTO test VALUES (1, 1);
INSERT INTO test VALUES (1, 1);
INSERT INTO test VALUES (1, 2);
INSERT INTO test VALUES (1, 3);
INSERT INTO test VALUES (1, 4);
INSERT INTO test VALUES (1, 5);
INSERT INTO test VALUES (2, 1);
INSERT INTO test VALUES (2, 2);
INSERT INTO test VALUES (2, 4);
INSERT INTO test VALUES (3, 1);
INSERT INTO test VALUES (3, 2);
INSERT INTO test VALUES (3, 3);

Надо: выбрать уникальные номера стобца а, где есть и, одновременно 1,2,3,4.
Запрос вида:select a,count(distinct b)
from test
where b IN(1,2,3,4)
group by 1
having 2=4
не дает результата, In выдает все страницы, где встречается хотя бы один из вариантов. А мне надо все.
Как лучше сделать запрос? Внимание! важдно то, что столбцы a,b не являются уникальным ключем, в а=1 есть два b=1.
 
чё-то я совсем запутался в твоем вопросе... из приведённого примера, что тебе нужно выбрать конкретно..., как это b может одновременно быть и 1 и в и 3 и 4... если это только 1 значение???
а-а-а-а... понял!!!!!!!
 
select a,count(distinct b) summa
from test
where b IN(1,2,3,4)
group by a
having summa=4

2=4 очень интересно смотриться.
 
select a,count(distinct b) summa
from test
where b IN(1,2,3,4)
group by a
having summa=4
не то, там может быть count(distinct b) больше четырех, не обязательно только эти числа должны входить... эти - обязательно, другие - не важно, могут входить, а могут и нет
 
В таблице только два поля, или есть еще какие-нибудь поля?
Дай условие уникальности.
Две записи с a=1 и b=1, ничем не отличаются.
 
в таблице 3 поля... в реальном примере - номер страницы, номер слова и номер позиции(pageid,wordid,position). то есть,
на странице может быть несколько wordid, но с разными position. primary key на этих трех столбцах. надо выбрать уникальные номера страниц, гдебы встречались ВСЕ нужные номера слов....
 
трудно понять чем предложенный запрос не устраивает
select a,count(distinct b) summa
from test
where b IN(1,2,3,4)
group by a
having summa=4
не то, там может быть count(distinct b) больше четырех
откуда больше? Если четыре слова обязательны (если они повторяются , то distinct все равно сделает 4) , то будут выбраны только те id страниц на которых точно присутствуют эти слова. Если одного или более из слов 1,2,3,4 нет на странице, то значение summa будет меньше 4. Другие слова мы просто не принимаем во внивание они могут быть , могут и не быть.
 
вы все не понимаете главного - на странице, к примеру, могут быть 1,2,3,4,5,6 - id слов... если я выбираю страницы, где точно есть 1,2,3,4, то туда попадет и эта страница. count(distinct) вернет не 4, а 6! Надеюсь, так понятно?
 
Автор оригинала: clevel
вы все не понимаете главного - на странице, к примеру, могут быть 1,2,3,4,5,6 - id слов... если я выбираю страницы, где точно есть 1,2,3,4, то туда попадет и эта страница. count(distinct) вернет не 4, а 6! Надеюсь, так понятно?
Неправильно. Тебе же написали where b IN(1,2,3,4)
Не будут считаться 5,6,...
 
Автор оригинала: clevel
вы все не понимаете главного - на странице, к примеру, могут быть 1,2,3,4,5,6 - id слов... если я выбираю страницы, где точно есть 1,2,3,4, то туда попадет и эта страница. count(distinct) вернет не 4, а 6! Надеюсь, так понятно?
Да хоть 200 слов, мы выбираем только 4: where summa IN (1,2,3,4).
Из всего вышесказанного похоже, что это ты не понимаешь.
Ты возьми у себя , запусти SQL и посмотри результат для разного набора слов.
Тогда покажи с какими данными тестирушь и где мы чего-то не понимаем.
 
Сверху