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

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

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

в общем вот так... какие есть соображения?
...
Рейтинг: 0 / 0
sql задачка
    #32104924
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собссно так:
Код: 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
sql задачка
    #32105075
$ly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
$ly
Гость
ышь ты.... сенкс большой!
а где можно почитать про FROM idtest a, idtest b, или как это называется, алиасы какие-то?
...
Рейтинг: 0 / 0
sql задачка
    #32105170
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну это и есть ALIASE's , на самом деле их надо исаользовать со словом AS но в некоторых случаех AS можно опустить.
Но с ними иногда возникают проблемы .
...
Рейтинг: 0 / 0
sql задачка
    #32105213
$ly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
$ly
Гость
слушай, твой пример прекрасно работает... думал сам смогу адаптировать, была бы идея... ща читаю про алиасы... задача стоит посложнее: условие может содержать большое количество значений, например id2=1, id2=2, id2=3 ... что делать в таком случае? запрос генерится динамически, id2 может быть например 5-10... как сделать универсально?
...
Рейтинг: 0 / 0
sql задачка
    #32105215
$ly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
$ly
Гость
забыл сказать, ограничен mysql 3.23.52
...
Рейтинг: 0 / 0
sql задачка
    #32105233
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даже и не напрягайся...
Создай один запрос который выберет все варианты 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
sql задачка
    #32105256
$ly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
$ly
Гость
в общем, это конечно тупо... если количество условий -> большое число... хотя мне для текущей задачи такой вариант подойдет... но хтелось бы узнать, можно ли универсально сделать... хотя гемморой не стоит свеч...

сенкс.
...
Рейтинг: 0 / 0
sql задачка
    #32105337
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через временную таблицу можно зделать универсальную. Единственное надо знать сколько всего существует вариантов 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
sql задачка
    #32105416
$ly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
$ly
Гость
первым методом для трех вариантов получилось достаточно устрашающе...
Код: 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
sql задачка
    #32107355
Осирис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения, что вмешиваюсь и заранее прошу прощения, если я не прав, так как с 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
sql задачка
    #32107364
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Осирис, дело не в том что ты мало с MySQL работал. А втом что ты невнимателен...

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

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

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


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