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

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.
 

shingrus

Guest
чё-то я совсем запутался в твоем вопросе... из приведённого примера, что тебе нужно выбрать конкретно..., как это b может одновременно быть и 1 и в и 3 и 4... если это только 1 значение???
а-а-а-а... понял!!!!!!!
 

Demiurg

Guest
select a,count(distinct b) summa
from test
where b IN(1,2,3,4)
group by a
having summa=4

2=4 очень интересно смотриться.
 

clevel

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

chira

Новичок
В таблице только два поля, или есть еще какие-нибудь поля?
Дай условие уникальности.
Две записи с a=1 и b=1, ничем не отличаются.
 

clevel

Новичок
в таблице 3 поля... в реальном примере - номер страницы, номер слова и номер позиции(pageid,wordid,position). то есть,
на странице может быть несколько wordid, но с разными position. primary key на этих трех столбцах. надо выбрать уникальные номера страниц, гдебы встречались ВСЕ нужные номера слов....
 

chira

Новичок
трудно понять чем предложенный запрос не устраивает
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. Другие слова мы просто не принимаем во внивание они могут быть , могут и не быть.
 

clevel

Новичок
вы все не понимаете главного - на странице, к примеру, могут быть 1,2,3,4,5,6 - id слов... если я выбираю страницы, где точно есть 1,2,3,4, то туда попадет и эта страница. count(distinct) вернет не 4, а 6! Надеюсь, так понятно?
 

Barlone

Guest
Автор оригинала: 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,...
 

chira

Новичок
Автор оригинала: 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 и посмотри результат для разного набора слов.
Тогда покажи с какими данными тестирушь и где мы чего-то не понимаем.
 
Сверху