Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 25.01.2013
Сообщений: 18
1

нужно составить запрос

09.05.2013, 20:08. Показов 787. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ребята, всем привет. Нужна ваша помощь. Имеется следующая таблица School:

Teacher Class
t1 A
t1 B
t2 B
t3 B
t2 A
t3 C
t2 C

Нужно создать запрос который находит те классы в которых преподают ВСЕ преподаватели (т.е вывод должен иметь только В)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.05.2013, 20:08
Ответы с готовыми решениями:

Нужно составить SQL запрос
1. Есть таблица pa_trans 2. В ней есть столбец с выводом status 3. У status по умолчанию стоит...

Нужно правильно составить запрос
Всем привет. Имеется две таблички. stats и users Нужно выбрать одну старшую (MIN(`id`)) запись...

Нужно составить запрос с группировками
Нужно из таблицы достать строки только те, которых по количеству больше определённого значения с...

Нужно составить запрос на удаление строк по id
Всем привет. У меня такая проблема: не могу грамотно составить SQL-запрос. Допустим, я на...

4
1177 / 419 / 106
Регистрация: 31.03.2012
Сообщений: 1,145
10.05.2013, 08:49 2
не самый оптимальный , но что-то еще придумывать было лениво. На этих тестовых данных выдает "B". Дополнительно не проверял.
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
create table x (
  m char(1),
  p char(1)
) engine = myisam default character set = cp1251;
insert into x values
  ('1', 'a'),
  ('1', 'b'),
  ('2', 'b'),
  ('3', 'b'),
  ('2', 'a'),
  ('2', 'c'),
  ('3', 'c');
select p from (
  select m,p from x group by p,m) a
    group by p having count(a.p) = (select count(*) from (select distinct m from x) b);
0
13208 / 6596 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
10.05.2013, 10:13 3
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SELECT `Class`
FROM
    (
        SELECT DISTINCT `Class`
        FROM `School`
    ) AS `c`
WHERE 1 = ALL (
    SELECT
        EXISTS(
            SELECT *
            FROM `School` AS `s`
            WHERE `s`.`Teacher` = `t`.`Teacher`
                AND `s`.`Class` = `c`.`Class`
        )
    FROM
        (
            SELECT DISTINCT `Teacher`
            FROM `School`
        ) AS `t`
);
0
1177 / 419 / 106
Регистрация: 31.03.2012
Сообщений: 1,145
10.05.2013, 12:14 4
Поздравляю, я и не думал, что так легко напишу простой и совершенно не оптимальный код, но ты меня переплюнул, спасибо!
Вывод для explain на одних и тех же данных

Код
mysql> explain select p from (                                                                                            
    ->  select m,p from x group by p,m) as a                                                                              
    ->          group by p having count(a.p) = (select count(*) from (select distinct m from x) b);                       
+----+-------------+------------+------+---------------+------+---------+------+------+---------------------------------+ 
| id | select_type | table      | type | possible_keys | key  | key_len | ref  | rows | Extra                           | 
+----+-------------+------------+------+---------------+------+---------+------+------+---------------------------------+ 
|  1 | PRIMARY     | <derived2> | ALL  | NULL          | NULL | NULL    | NULL |   10 | Using temporary; Using filesort | 
|  3 | SUBQUERY    | NULL       | NULL | NULL          | NULL | NULL    | NULL | NULL | Select tables optimized away    | 
|  4 | DERIVED     | x          | ALL  | NULL          | NULL | NULL    | NULL |   11 | Using temporary                 | 
|  2 | DERIVED     | x          | ALL  | NULL          | NULL | NULL    | NULL |   11 | Using temporary; Using filesort | 
+----+-------------+------------+------+---------------+------+---------+------+------+---------------------------------+ 
4 rows in set (0.00 sec)                                                                                                  
                                                                                                                          
mysql> explain SELECT `Class` FROM (                                                                                      
    ->  SELECT DISTINCT `Class` FROM `School`) AS `c`                                                                     
    ->          WHERE 1 = ALL (                                                                                           
    ->     SELECT EXISTS (                                                                                                
    ->          SELECT * FROM `School` AS `s`                                                                             
    ->                  WHERE `s`.`Teacher` = `t`.`Teacher` AND `s`.`Class` = `c`.`Class`)                                
    ->     FROM (                                                                                                         
    ->          SELECT DISTINCT `Teacher` FROM `School`) AS `t`);                                                         
+----+--------------------+------------+------+---------------+------+---------+------+------+-----------------+          
| id | select_type        | table      | type | possible_keys | key  | key_len | ref  | rows | Extra           |          
+----+--------------------+------------+------+---------------+------+---------+------+------+-----------------+          
|  1 | PRIMARY            | <derived2> | ALL  | NULL          | NULL | NULL    | NULL |    3 | Using where     |          
|  3 | DEPENDENT SUBQUERY | <derived5> | ALL  | NULL          | NULL | NULL    | NULL |    4 | Using where     |          
|  5 | DERIVED            | School     | ALL  | NULL          | NULL | NULL    | NULL |   11 | Using temporary |          
|  4 | DEPENDENT SUBQUERY | s          | ALL  | NULL          | NULL | NULL    | NULL |   11 | Using where     |          
|  2 | DERIVED            | School     | ALL  | NULL          | NULL | NULL    | NULL |   11 | Using temporary |          
+----+--------------------+------------+------+---------------+------+---------+------+------+-----------------+          
5 rows in set (0.00 sec)
1
Vovan-VE
11.05.2013, 08:14     нужно составить запрос
  #5

Не по теме:

Joeymax, Мне всё равно не даёт покоя мысль, что должен быть способ лучше. :umbrage:

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.05.2013, 08:14

Нужно составить запрос на выборку за последние 7 дней
Приветствую форумчане. Сейчас у меня строится таблица, где указан день недели(7 столбцов всего) и...

Нужно составить запрос
Есть таблица soldItems, там есть поле itemId Есть таблица items, там есть поле id (=itemId) и...

Нужно задать sql запрос. не понимаю как. Нужно из одной таблицы вывести данные
В общем, нужно задать sql запрос где будет подсчитано общее кол-во записей (name - название работ)...

Составить запрос
Номер_детали|Версия|Наименование|и еще много полей... 700|A 700|B 700|C 800|00 800|01 Поля...

Составить запрос
Имеются некоторые таблицы, для запроса необходимы 2 из них. Структура первой (table1): - One...

Составить запрос
Помогите составить запрос Дано: Дана таблица TABLE (ID int). В таблице...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru