SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 12.11.2010 19:04:49

nikolajtesla
Завсегдатай
Зарегистрирован: 12.10.2010
Сообщений: 25

Выборка из таблицы

Есть 2 таблицы (Для простоты убрано все ненужное):
CREATE TABLE IF NOT EXISTS `loc2file` (
  `lid` int(10) unsigned NOT NULL,
  `fid` int(10) unsigned NOT NULL
);

CREATE TABLE IF NOT EXISTS `rus_smartix_files` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
);

с данными
INSERT INTO `files` (`id`, `name`) VALUES (5, 'name_0'), (6, 'name_1'), (7, 'name_2'), (8, 'name_3');
INSERT INTO `loc2file` (`lid`, `fid`) VALUES (632, 5), (632, 7), (632, 8), (641, 7);

Необходимо сделать такую выборку:
Для каждого елемента из таблицы files определить есть ли в таблице loc2file данный елемент и в этой таблице lid = xxx

пример того, что должен вернуть запрос
Если lid = 632, то
5 1
6 0
7 1
8 1

Если lid = 641, то
5 0
6 0
7 1
8 0

Неактивен

 

#2 12.11.2010 19:37:31

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Выборка из таблицы

Код:

 root test > select f.id,count(lid) from files f left join loc2file l on f.id = l.fid where lid = 632 or lid is null group by 1;
+----+------------+
| id | count(lid) |
+----+------------+
|  5 |          1 |
|  6 |          0 |
|  7 |          1 |
|  8 |          1 |
+----+------------+

Неактивен

 

#3 13.11.2010 11:34:40

nikolajtesla
Завсегдатай
Зарегистрирован: 12.10.2010
Сообщений: 25

Re: Выборка из таблицы

Спасибо, вот только если выбрать
select f.id, count(lid) from files f left join loc2file l on f.id = l.fid  where lid = 641 or lid is null group by 1;
то выборка получится не правильная.
Выведется
6 0
7 1

Вместо
5 0
6 0
7 1
8 0

Неактивен

 

#4 13.11.2010 13:43:53

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Выборка из таблицы

Ах вот в чем проблема smile

Код:

 root test > select f.id,SUM(IF(l.lid = 641, 1, 0)) from files f left join loc2file l on f.id = l.fid GROUP BY 1;
+----+----------------------------+
| id | SUM(IF(l.lid = 641, 1, 0)) |
+----+----------------------------+
|  5 |                          0 |
|  6 |                          0 |
|  7 |                          1 |
|  8 |                          0 |
+----+----------------------------+
4 rows in set (0.00 sec)

Ну или подзапросом.

Неактивен

 

#5 13.11.2010 14:08:00

nikolajtesla
Завсегдатай
Зарегистрирован: 12.10.2010
Сообщений: 25

Re: Выборка из таблицы

Спаибо большое.

Неактивен

 

Board footer

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