powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / как сделать запрос?
10 сообщений из 10, страница 1 из 1
как сделать запрос?
    #39229479
vartadan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Есть следующие таблицы:
таблица t1 с полем
id1 - первичный ключ
таблица t2 с полем
id2 - первичный ключ
таблица t3, которая организует связь многие ко многим для приведенных выше таблиц, с полями
id1_3,id2_3
И есть список (таблица t4) с полем id1_4 все элементы которого являются подмножеством таблицы t1.

Вопрос №1: Как выбрать только те строки t2 у которых ВСЕ соответствующие элементы id1_3 (через таблицу t3) входят в таблицу t4.
Вопрос №2: То же что и выше, но в таблицу t4 не входят 1,2,3 и т.д. элементов.
...
Рейтинг: 0 / 0
как сделать запрос?
    #39229492
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vartadanКак выбрать только те строки t2 у которых ВСЕ соответствующие элементы id1_3 (через таблицу t3) входят в таблицу t4.
После соответствующего связывания сгруппировать по t2 и убедиться, что count-ы по t3 и t4 равны.

vartadanТо же что и выше, но в таблицу t4 не входят 1,2,3 и т.д. элементов.
Ну а тут разность посчитать.
...
Рейтинг: 0 / 0
как сделать запрос?
    #39230379
vartadan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
Получилось что-то вроде этого

SELECT (select count(*) from t4),COUNT(t2.id2), t2.id2
FROM t4 left join t3
on t4.id1_4=t3.id1_3 left join t2 on t3.id2_3=t2.id2
group by t2.id2

Результат получился такой
(select count(*) from t4)|COUNT(t2.id2)|t2.id2
84|15|2072
84|15|9275
84|14|8800

но для ответа на вопрос №1 нужно в вышеуказанный запрос добавить что-то типа

select count(*) from t3 where t3.id2_3='2072'

а как это сделать подскажите, пожалуйста
...
Рейтинг: 0 / 0
как сделать запрос?
    #39230555
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vartadanПолучилось что-то вроде этого
Близко не лежало.

Выкладывайте (под спойлер с теге SRC) протестированные (!!!) запросы формирования структуры и наполнения таблиц и показывайте желаемый на этих данных результат.
...
Рейтинг: 0 / 0
как сделать запрос?
    #39231058
vartadan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
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.
41.
42.
43.
CREATE TABLE  t1(id1 BIGINT( 20 ) NOT NULL);
CREATE TABLE  t2(id2 BIGINT( 20 ) NOT NULL);
CREATE TABLE  t3(id2_3 BIGINT( 20 ) NOT NULL,id1_3 BIGINT( 20 ) NOT NULL);
CREATE TABLE  t4(id1_4 BIGINT( 20 ) NOT NULL);

insert into t1 (id1) value (1);
insert into t1 (id1) value (2);
insert into t1 (id1) value (3);
insert into t1 (id1) value (4);
insert into t1 (id1) value (5);
insert into t1 (id1) value (6);
insert into t1 (id1) value (7);
insert into t1 (id1) value (8);
insert into t1 (id1) value (9);
insert into t1 (id1) value (10);

insert into t2 (id2) value (1);
insert into t2 (id2) value (2);
insert into t2 (id2) value (3);
insert into t2 (id2) value (4);
insert into t2 (id2) value (5);

insert into t3 (id2_3,id1_3) value (1,2);
insert into t3 (id2_3,id1_3) value (1,5);
insert into t3 (id2_3,id1_3) value (1,10);
insert into t3 (id2_3,id1_3) value (1,6);
insert into t3 (id2_3,id1_3) value (2,5);
insert into t3 (id2_3,id1_3) value (2,8);
insert into t3 (id2_3,id1_3) value (2,9);
insert into t3 (id2_3,id1_3) value (3,1);
insert into t3 (id2_3,id1_3) value (3,4);
insert into t3 (id2_3,id1_3) value (4,4);
insert into t3 (id2_3,id1_3) value (4,5);
insert into t3 (id2_3,id1_3) value (4,3);
insert into t3 (id2_3,id1_3) value (4,7);
insert into t3 (id2_3,id1_3) value (4,1);
insert into t3 (id2_3,id1_3) value (5,6);
insert into t3 (id2_3,id1_3) value (5,7);

insert into t4 (id1_4) value (4);
insert into t4 (id1_4) value (5);
insert into t4 (id1_4) value (3);
insert into t4 (id1_4) value (1);



Ответ:
на вопрос №1
id2
3

на вопрос №2
id2|col
4|1
2|2
1|3
...
Рейтинг: 0 / 0
как сделать запрос?
    #39231104
на вопрос №1:
Код: sql
1.
2.
3.
4.
5.
select t2.* from t2
 left join t3 ON t2.id2 = t3.id2_3
 left join t4 ON t3.id1_3 = t4.id1_4
group by t2.id2
having max(if(t4.id1_4 is null, 1, 0)) = 0;



на вопрос №2 - не понятно что значит: " не входят 1,2,3 и т.д. элементов ".
...
Рейтинг: 0 / 0
как сделать запрос?
    #39231110
на вопрос №2 (если я правильно догадался):
Код: sql
1.
2.
3.
4.
5.
6.
select t2.*, sum(if(t4.id1_4 is null, 1, 0)) as c
 from t2
 left join t3 ON t2.id2 = t3.id2_3
 left join t4 ON t3.id1_3 = t4.id1_4
group by t2.id2
having c between 1 and 3  AND  min(if(t4.id1_4 is null, 1, 0)) = 0;
...
Рейтинг: 0 / 0
как сделать запрос?
    #39231111
vartadan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Громыхатель,
Это значит что 1,2 или 3 элемента из множества типа (select id1_3 from t3 where t3.id2_3=X) не входит во множество t4
...
Рейтинг: 0 / 0
как сделать запрос?
    #39235634
vartadan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тестирую на Денвере, в таблице t1 - 760 записей, t2 - 5000 записей, t3 - 230000 записей, t4 - 80 записей. После десяти минут выполнения запроса никакого ответа так и не получил - надоело ждать, завершил процесс. Вопрос - это денвер такой медленный или количество записей действительно слишком большое? Как можно ускорить выполнение запроса?
...
Рейтинг: 0 / 0
как сделать запрос?
    #39235674
Значит индексы отсутствуют. Сделайте Explain долгих запросов.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / как сделать запрос?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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