SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 12.10.2010 23:05:08

skutor
Участник
Зарегистрирован: 12.10.2010
Сообщений: 3

Выборка из двух таблиц

SELECT
*
FROM
ocenka ,
student
WHERE
student.group = 1 AND
ocenka.disciplina = 2

Такая ситуация учимся у препода sql на MS Access он этого языка не знает и все задания дает по учебнику,а проверяет методом если это работает у вас на аксесе - знач правильно если нет - то нет.

дал задание создать 2 таблицы студенты(фио,группа,дата приема) и оценки(фио,оценка,дисциплина номер) и  выделить из студентов тех где группа 1 и из оценки тех где дисциплина 2.
у меня этот запрос на mysql выводит как положено 2 строчки из созданного мной примера , а на аксесе выводит 4 строчки одним словом дублирует 2 из студенты 2 из оценки.
как мне от этого излишества избавится?

Неактивен

 

#2 13.10.2010 00:58:20

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выборка из двух таблиц

Нужно написать правильный запрос.

А вот на MySQL наговаривать не нужно, он также как и другие СУБД (в том числе MS Access) поддерживает стандарт SQL.


create table `студенты`(`фио` varchar(20),`группа` tinyint,`дата приема` date);
create table `оценка`(`фио` varchar(20),`оценка` tinyint,`номер дисциплины` tinyint);
insert into `студенты` values('иванов',1,now()),('петров',1,now());
insert into `оценка` values('иванов',4,2),('петров',5,2);
SELECT * FROM `оценка`,`студенты` WHERE `группа` = 1 AND `номер дисциплины` = 2;
+--------+--------+------------------+--------+--------+-------------+
| фио    | оценка | номер дисциплины | фио    | группа | дата приема |
+--------+--------+------------------+--------+--------+-------------+
| иванов |      4 |                2 | иванов |      1 | 2010-10-13  |
| петров |      5 |                2 | иванов |      1 | 2010-10-13  |
| иванов |      4 |                2 | петров |      1 | 2010-10-13  |
| петров |      5 |                2 | петров |      1 | 2010-10-13  |
+--------+--------+------------------+--------+--------+-------------+
4 rows in set (0.00 sec)
 

Неактивен

 

#3 13.10.2010 15:59:45

skutor
Участник
Зарегистрирован: 12.10.2010
Сообщений: 3

Re: Выборка из двух таблиц

ну а надо чтоб 2 строчки вывел а не 4
точнее столько строк столько сколько удовлетворяет условию без повторов

Отредактированно skutor (13.10.2010 16:00:32)

Неактивен

 

#4 13.10.2010 16:57:03

avgsoft
Завсегдатай
Зарегистрирован: 23.09.2010
Сообщений: 36

Re: Выборка из двух таблиц

если нужно получить список оценок студентов группы "1" по дисциплине "2", то можно так

SELECT * FROM `оценка`,`студенты` WHERE  `оценка`.`ФИО` = `студенты`.`ФИО` AND `группа`= 1 AND `номер дисциплины` = 2;

Неактивен

 

#5 13.10.2010 17:47:17

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выборка из двух таблиц

skutor написал:

ну а надо чтоб 2 строчки вывел а не 4
точнее столько строк столько сколько удовлетворяет условию без повторов

Ну так все 4 и удовлетворяют условию, и повторов среди них нет wink
Посмотрите внимательно на 1 и 4 столбцы.

Неактивен

 

#6 13.10.2010 21:00:40

skutor
Участник
Зарегистрирован: 12.10.2010
Сообщений: 3

Re: Выборка из двух таблиц

ну я на mysql так и делал - работает все ок.
а на этом мс аксес выводит дубликаты. в итоге сегодня решили проблему методом inner join правда так и не понял что это значит_))

Неактивен

 

#7 13.10.2010 21:19:41

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выборка из двух таблиц

skutor написал:

ну я на mysql так и делал - работает все ок.

Как оно может работать ок, если выше приведен пример на mysql, выводящий то, что вы называете дубликатами.

skutor написал:

а на этом мс аксес выводит дубликаты. в итоге сегодня решили проблему методом inner join правда так и не понял что это значит_))

В приведенном вами запросе вы использовали прямое произведение таблиц, т.е. для каждой строки первой таблицы выбираются все строчки второй. А inner join это объединение по определенному условию, т.е. для каждой строки первой таблицы выбираются только те строчки из второй которые удовлетворяют условию.

Двумя постами выше avgsoft привел правильный вариант запроса.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson