SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 16.05.2011 15:50:47

ferer
Участник
Зарегистрирован: 12.05.2011
Сообщений: 7

Join + where ?

Есть 2 таблицы

Tab1
id | address
1  | Адрес 1
2  | Адрес 2
3  | Адрес 3

Tab2
id | id_address | people  | data
1  | 2          | Имя 1  | 2011-01-08
2  | 1          | Имя 2  | 2011-01-10
3  | 2          | Имя 3  | 2011-01-11
4  | 2          | Имя 4  | 2011-02-01
5  | 1          | Имя 5  | 2011-02-02
6  | 2          | Имя 6  | 2011-02-07
7  | 3          | Имя 7  | 2011-02-20



Необходимо выбрать из Tab2 информацию за период времени и потом присоединить к ней адрес из таблице Tab1. Связующие поля Tab1.id = Tab2.id_address

"SELECT * FROM Tab2 WHERE DATE( date ) >= '2011-01-10' AND DATE( date ) <= '2011-02-07"

По интервалу времени выборка проходит, а как присоединить address?

Спасибо.

Неактивен

 

#2 16.05.2011 17:19:14

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Join + where ?

SET NAMES UTF8;

DROP TABLE IF EXISTS `t_4261_Tab2`;
DROP TABLE IF EXISTS `t_4261_Tab1`;

CREATE TABLE `t_4261_Tab1` (
  `id` BIGINT(20) UNSIGNED NOT NULL auto_increment PRIMARY KEY,
  `address` VARCHAR(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into `t_4261_Tab1`(`address`) values('Адрес 1'),('Адрес 2'),('Адрес 3');

CREATE TABLE `t_4261_Tab2` (
  `id` bigint(20) UNSIGNED NOT NULL auto_increment PRIMARY KEY,
  `address_id` bigint(20) unsigned NOT NULL DEFAULT 0,
  `people` varchar(255) default NULL,
  `data` date,
  FOREIGN KEY (address_id) REFERENCES `t_4261_Tab1`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into `t_4261_Tab2`(`address_id`,`people`,`data`) values
(2, 'Имя 1', '2011-01-08'),  
(1, 'Имя 2', '2011-01-10'),
(2, 'Имя 3', '2011-01-11'),
(2, 'Имя 4', '2011-02-01'),
(1, 'Имя 5', '2011-02-02'),
(2, 'Имя 6', '2011-02-07'),
(3, 'Имя 7', '2011-02-20');


Можно так
SELECT t2.*, t1.address FROM `t_4261_Tab2` t2,`t_4261_Tab1` t1 WHERE t1.id=t2.address_id and t2.data  >= '2011-01-10' and t2.data <= '2011-02-07' order by t2.id;


Или так
SELECT t2.*,t1.address FROM  `t_4261_Tab2` t2 INNER JOIN `t_4261_Tab1` t1 ON t1.id=t2.address_id where t2.data  >= '2011-01-10' and t2.data <= '2011-02-07' order by t2.id;


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

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