Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / sql задачка / 13 сообщений из 13, страница 1 из 1
11.02.2003, 20:03
    #32104798
$ly
$ly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql задачка
пипл, помогите плис, задачка вроде тривиальная, но не получается...
дано:
таблица:
id1|id2
------
1|1
1|2
2|1
3|1
3|2

надо:
выбрать значения id1 которые встречаются с id2=1 AND id2=2

результат:
т.е. в результате надо получить
id1
---
1
3

в общем вот так... какие есть соображения?
...
Рейтинг: 0 / 0
12.02.2003, 09:48
    #32104924
mahoune
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql задачка
Собссно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
create table idtest (id1 integer, id2 integer);

insert into idtest values('1','1');
insert into idtest values('1','2');
insert into idtest values('2','1');
insert into idtest values('3','1');
insert into idtest values('3','2');

select * from idtest;
+ ------+------+
 
| id1  | id2  |
+ ------+------+
 
|     1  |     1  |
|     1  |     2  |
|     2  |     1  |
|     3  |     1  |
|     3  |     2  |
+ ------+------+
 
 5  rows in set ( 0 . 00  sec)

SELECT a.id1
FROM idtest a, idtest b
WHERE
a.id1=b.id1
AND
a.id2= 1 
AND
b.id2= 2 ;
+ ------+
 
| id1  |
+ ------+
 
|     1  |
|     3  |
+ ------+
 
...
Рейтинг: 0 / 0
12.02.2003, 12:52
    #32105075
$ly
$ly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql задачка
ышь ты.... сенкс большой!
а где можно почитать про FROM idtest a, idtest b, или как это называется, алиасы какие-то?
...
Рейтинг: 0 / 0
12.02.2003, 14:41
    #32105170
mahoune
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql задачка
Ну это и есть ALIASE's , на самом деле их надо исаользовать со словом AS но в некоторых случаех AS можно опустить.
Но с ними иногда возникают проблемы .
...
Рейтинг: 0 / 0
12.02.2003, 15:17
    #32105213
$ly
$ly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql задачка
слушай, твой пример прекрасно работает... думал сам смогу адаптировать, была бы идея... ща читаю про алиасы... задача стоит посложнее: условие может содержать большое количество значений, например id2=1, id2=2, id2=3 ... что делать в таком случае? запрос генерится динамически, id2 может быть например 5-10... как сделать универсально?
...
Рейтинг: 0 / 0
12.02.2003, 15:21
    #32105215
$ly
$ly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql задачка
забыл сказать, ограничен mysql 3.23.52
...
Рейтинг: 0 / 0
12.02.2003, 15:39
    #32105233
mahoune
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql задачка
Даже и не напрягайся...
Создай один запрос который выберет все варианты id2 и второй создавай динамически

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SELECT t_1.id1
FROM idtest t_1, idtest t_2, ...., idtest t_n
WHERE
(
  t_1.id1=t_2.id1
  AND
  ...
  AND
  t_1.id1=t_n.id1
)
AND
(
  t_1.id2= 1 
  AND
  t_2.id2= 2 
  ...
  AND
  t_n.id2=n
);
...
Рейтинг: 0 / 0
12.02.2003, 16:00
    #32105256
$ly
$ly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql задачка
в общем, это конечно тупо... если количество условий -> большое число... хотя мне для текущей задачи такой вариант подойдет... но хтелось бы узнать, можно ли универсально сделать... хотя гемморой не стоит свеч...

сенкс.
...
Рейтинг: 0 / 0
12.02.2003, 17:33
    #32105337
mahoune
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql задачка
Через временную таблицу можно зделать универсальную. Единственное надо знать сколько всего существует вариантов id2

Код: plaintext
1.
2.
3.
4.
CREATE TEMPORARY TABLE aaa (id1 int, id2 int);
INSERT INTO aaa SELECT id1, id2 FROM idtest GROUP BY id1, id2;
SELECT id1, count(*) FROM aaa GROUP BY id1 HAVING count(*)> 1 ;
DROP aaa;
...
Рейтинг: 0 / 0
12.02.2003, 20:05
    #32105416
$ly
$ly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql задачка
первым методом для трех вариантов получилось достаточно устрашающе...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT COUNT(t_0.item_id) as cnt FROM cat_props_links AS t_0 , cat_props_links AS t_1 , cat_props_links AS t_2 
WHERE 
( t_0.item_id=t_0.item_id AND t_0.item_id=t_1.item_id AND t_0.item_id=t_2.item_id) 
AND 
( t_1.item_id=t_0.item_id AND t_1.item_id=t_1.item_id AND t_1.item_id=t_2.item_id) 
AND 
( t_2.item_id=t_0.item_id AND t_2.item_id=t_1.item_id AND t_2.item_id=t_2.item_id) 
AND t_0.prop_id= 2  AND t_1.prop_id= 5  AND t_2.prop_id= 4 



есть конечно лишние сравнение, это первый вариант...

буду копать в направлении временных таблиц... проблемка, что количество параметров не совсем известно... :-((

не знаешь, что с точки зрения производительности будет быстрее? сложный запрос или временная таблица (на сервере вроде всего 128 памяти, фря 4.2, а записей будет несколько сотен*количество условий (можно принудить mysql с помощью SELECT SQL_BIG_RESULT пользовать винт? а то как бы свап не испортил всей малины, сказавшись на перфомансе))
...
Рейтинг: 0 / 0
17.02.2003, 14:27
    #32107355
Осирис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql задачка
Прошу прощения, что вмешиваюсь и заранее прошу прощения, если я не прав, так как с MySql практически не работал.
Но вот так разве нельзя:

create table #a (a int,b int)

insert into #a values(1,1)
insert into #a values(1,2)
insert into #a values(2,1)
insert into #a values(3,1)
insert into #a values(3,2)

select * from #a

select a
from #a
group by a
having count(b)>1

drop table #a
...
Рейтинг: 0 / 0
17.02.2003, 14:35
    #32107364
mahoune
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql задачка
2Осирис, дело не в том что ты мало с MySQL работал. А втом что ты невнимателен...

$ly писал:запрос генерится динамически, id2 может быть например 5-10... как сделать универсально?

Так вот и вопрос в том как создать универсально.

P.S. Мой последний ответ давал решение то-же что и твое!
...
Рейтинг: 0 / 0
18.02.2003, 17:16
    #32108211
$ly
$ly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql задачка
2осирис: а если b в таблице 1,2,3, а надо выбрать а, у которых b=1 И b=3? не говорю про то, что параметров больше чем 2, и разброс значений не поддается предугадыванию.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / sql задачка / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]