SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 26.10.2013 01:04:22

yaufol
Участник
Зарегистрирован: 26.10.2013
Сообщений: 4

объединение таблиц

Доброго времени суток! Как сделать объединение двух таблиц, учитывая, что у них нет общих полей? Выражаясь математическим языком, нужно получить все элементы матрицы, полученные перемножением двух векторов.

Неактивен

 

#2 26.10.2013 01:05:50

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

Re: объединение таблиц

SELECT * from t1, t2

?


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

Неактивен

 

#3 26.10.2013 01:14:46

yaufol
Участник
Зарегистрирован: 26.10.2013
Сообщений: 4

Re: объединение таблиц

Чёрт, всё оказалось элементарно, даже стыдно стало за такой вопрос. спасибо!

Неактивен

 

#4 26.10.2013 01:15:53

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

Re: объединение таблиц

Пожалуйста smile. Декартово произведение это вроде называется.


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

Неактивен

 

#5 26.10.2013 01:24:43

yaufol
Участник
Зарегистрирован: 26.10.2013
Сообщений: 4

Re: объединение таблиц

Еще тогда вопрос в догонку, есть третья таблица отношений многие-ко-многим для первых двух, о которых шла речь выше, нужно исключить эти данные из выборки декартового произведения. Т.к. база большая, то джойнит он это всё очень долго, можно ли как-то иначе выбрать все строки, которые не попадают в 3 таблицу?

Неактивен

 

#6 26.10.2013 01:27:14

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

Re: объединение таблиц

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


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

Неактивен

 

#7 26.10.2013 01:50:15

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

Re: объединение таблиц

Если приведете таблицы с тестовым примером данных, постараюсь подсказать точнее.


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

Неактивен

 

#8 26.10.2013 11:52:41

yaufol
Участник
Зарегистрирован: 26.10.2013
Сообщений: 4

Re: объединение таблиц

CREATE TABLE `devices` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `manufacturerId` int(11) NOT NULL,
  `title` varchar(255) NOT NULL,
  `status` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1095 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT

CREATE TABLE `parameters` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `parameter` varchar(255) NOT NULL,
  `value` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT

CREATE TABLE `result` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `parameterId` int(10) NOT NULL DEFAULT '0',
  `deviceId` int(10) NOT NULL DEFAULT '0',
  `result` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2034 DEFAULT CHARSET=utf8
 


|| *id* || *manufacturerId* || *title* || *status* ||
|| 1092 || 59 || TDS 3045 || 3 ||
|| 1093 || 15 || TDS 2000.5 || 3 ||
|| 1094 || 15 || RTDS 2000 || 2 ||


|| *id* || *parameter* || *value* ||
|| 38 || time || 10080 ||
|| 39 || time || 40320 ||
|| 40 || time || 483840 ||

|| *id* || *parameterId* || *deviceId* || *result* ||
|| 2031 || 38 || 1092 || 1 ||
|| 2032 || 40 || 1092 || 0 ||
|| 2033 || 40 || 1094 || 1 ||

Отредактированно yaufol (26.10.2013 11:53:58)

Неактивен

 

#9 26.10.2013 22:03:40

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

Re: объединение таблиц

Создайте индекс на связку ( parameterId`,`deviceId` ), на большиъ объемах может сильно помочь в скорости.


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

Неактивен

 

Board footer

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