Существуют ли ограничения на ВНУТРЕННЕЕ СОЕДИНЕНИЕ - часть 2? - PullRequest
0 голосов
/ 13 января 2011

Я уже задавал вопрос о INNER JOIN и LEFT JOIN, но у меня все еще нет ответов на вопрос о ПРЕДЕЛЕ, чтобы использовать INNER JOIN и LEFT JOIN в моем запросе.* У меня есть 11 таблиц различных видов материалов, которые мне нужно проверять каждый раз, когда мне нужно получить информацию о том, какой материал использовался в установке.

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

Возможно ли это?

В любом случае, спасибо, это просто любопытство.:)

[ИЗМЕНЕНО] * структура таблицы *

--
-- Estrutura da tabela `equipment`
--

CREATE TABLE IF NOT EXISTS `equipment` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `idcontrato` int(11) NOT NULL,
  `idtorre` int(11) NOT NULL,
  `ip` varchar(15) NOT NULL,
  `tipo_equip` int(11) NOT NULL,
  `obs` text NOT NULL,
  `usado_cliente` tinyint(1) NOT NULL COMMENT 'usado no cliente 1=sim 0=nao',
  `cod_equip` varchar(25) NOT NULL COMMENT 'codigo para controle de equipamento',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='equipamentos apenas para router e antenas' AUTO_INCREMENT=1 ;

--
-- Extraindo dados da tabela `equipment`
--


-- --------------------------------------------------------

--
-- Estrutura da tabela `equip_antena`
--

CREATE TABLE IF NOT EXISTS `equip_antena` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cod_equip` varchar(25) NOT NULL COMMENT 'codigo para controle de equipamento',
  `unid_medida` enum('metros','unidade','peça','pacote') DEFAULT NULL,
  `qtde` int(11) DEFAULT NULL,
  `idproduto` int(11) NOT NULL COMMENT 'id do produto na tbl produtos',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='tbl de equipamento instalado no cliente' AUTO_INCREMENT=1 ;

--
-- Extraindo dados da tabela `equip_antena`
--


-- --------------------------------------------------------

--
-- Estrutura da tabela `equip_antena_cable_rgc213`
--

CREATE TABLE IF NOT EXISTS `equip_antena_cable_rgc213` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cod_equip` varchar(25) NOT NULL COMMENT 'codigo para controle de equipamento',
  `unid_medida` enum('metros','unidade','peça','pacote') DEFAULT NULL,
  `qtde` int(11) DEFAULT NULL,
  `idantena` int(11) NOT NULL COMMENT 'id do produto na tbl produtos',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='tbl de equipamento instalado no cliente ' AUTO_INCREMENT=1 ;

--
-- Extraindo dados da tabela `equip_antena_cable_rgc213`
--


-- --------------------------------------------------------

--
-- Estrutura da tabela `equip_cable_utp`
--

CREATE TABLE IF NOT EXISTS `equip_cable_utp` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cod_equip` varchar(25) NOT NULL COMMENT 'codigo para controle de equipamento',
  `unid_medida` enum('metros','unidade','peça','pacote') DEFAULT NULL,
  `qtde` int(11) DEFAULT NULL,
  `idantena` int(11) NOT NULL COMMENT 'id do produto na tbl produtos',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='tbl de equipamento instalado no cliente ' AUTO_INCREMENT=1 ;

--
-- Extraindo dados da tabela `equip_cable_utp`
--


-- --------------------------------------------------------

--
-- Estrutura da tabela `equip_conector`
--

CREATE TABLE IF NOT EXISTS `equip_conector` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cod_equip` varchar(25) NOT NULL COMMENT 'codigo para controle de equipamento',
  `unid_medida` enum('metros','unidade','peça','pacote') DEFAULT NULL,
  `qtde` int(11) DEFAULT NULL,
  `idantena` int(11) NOT NULL COMMENT 'id do produto na tbl produtos',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='tbl de equipamento instalado no cliente ' AUTO_INCREMENT=1 ;

--
-- Extraindo dados da tabela `equip_conector`
--


-- --------------------------------------------------------

--
-- Estrutura da tabela `equip_conector2`
--

CREATE TABLE IF NOT EXISTS `equip_conector2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cod_equip` varchar(25) NOT NULL COMMENT 'codigo para controle de equipamento',
  `unid_medida` enum('metros','unidade','peça','pacote') DEFAULT NULL,
  `qtde` int(11) DEFAULT NULL,
  `idantena` int(11) NOT NULL COMMENT 'id do produto na tbl produtos',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='tbl de equipamento instalado no cliente ' AUTO_INCREMENT=1 ;

--
-- Extraindo dados da tabela `equip_conector2`
--


-- --------------------------------------------------------

--
-- Estrutura da tabela `equip_fonte`
--

CREATE TABLE IF NOT EXISTS `equip_fonte` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cod_equip` varchar(25) NOT NULL COMMENT 'codigo para controle de equipamento',
  `unid_medida` enum('metros','unidade','peça','pacote') DEFAULT NULL,
  `qtde` int(11) DEFAULT NULL,
  `idantena` int(11) NOT NULL COMMENT 'id do produto na tbl produtos',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='tbl de equipamento instalado no cliente ' AUTO_INCREMENT=1 ;

--
-- Extraindo dados da tabela `equip_fonte`
--


-- --------------------------------------------------------

--
-- Estrutura da tabela `equip_pigtail`
--

CREATE TABLE IF NOT EXISTS `equip_pigtail` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cod_equip` varchar(25) NOT NULL COMMENT 'codigo para controle de equipamento',
  `unid_medida` enum('metros','unidade','peça','pacote') DEFAULT NULL,
  `qtde` int(11) DEFAULT NULL,
  `idproduto` int(11) NOT NULL COMMENT 'id do produto na tbl produtos',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='tbl de equipamento instalado no cliente ' AUTO_INCREMENT=1 ;

--
-- Extraindo dados da tabela `equip_pigtail`
--


-- --------------------------------------------------------

--
-- Estrutura da tabela `equip_poe`
--

CREATE TABLE IF NOT EXISTS `equip_poe` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cod_equip` varchar(25) NOT NULL COMMENT 'codigo para controle de equipamento',
  `unid_medida` enum('metros','unidade','peça','pacote') DEFAULT NULL,
  `qtde` int(11) DEFAULT NULL,
  `idantena` int(11) NOT NULL COMMENT 'id do produto na tbl produtos',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='tbl de equipamento instalado no cliente ' AUTO_INCREMENT=1 ;

--
-- Extraindo dados da tabela `equip_poe`
--


-- --------------------------------------------------------

--
-- Estrutura da tabela `equip_rj45`
--

CREATE TABLE IF NOT EXISTS `equip_rj45` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cod_equip` varchar(25) NOT NULL COMMENT 'codigo para controle de equipamento',
  `unid_medida` enum('metros','unidade','peça','pacote') DEFAULT NULL,
  `qtde` int(11) DEFAULT NULL,
  `idproduto` int(11) NOT NULL COMMENT 'id do produto na tbl produtos',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='tbl de equipamento instalado no cliente ' AUTO_INCREMENT=1 ;

--
-- Extraindo dados da tabela `equip_rj45`
--


-- --------------------------------------------------------

--
-- Estrutura da tabela `equip_router`
--

CREATE TABLE IF NOT EXISTS `equip_router` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cod_equip` varchar(25) NOT NULL COMMENT 'codigo para controle de equipamento',
  `unid_medida` enum('metros','unidade','peça','pacote') DEFAULT NULL,
  `qtde` int(11) DEFAULT NULL,
  `idproduto` int(11) NOT NULL COMMENT 'id do produto na tbl produtos',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='tbl de equipamento instalado no cliente ' AUTO_INCREMENT=1 ;

--
-- Extraindo dados da tabela `equip_router`
--


-- --------------------------------------------------------

--
-- Estrutura da tabela `equip_suporte`
--

CREATE TABLE IF NOT EXISTS `equip_suporte` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cod_equip` varchar(25) NOT NULL COMMENT 'codigo para controle de equipamento',
  `unid_medida` enum('metros','unidade','peça','pacote') DEFAULT NULL,
  `qtde` int(11) DEFAULT NULL,
  `idantena` int(11) NOT NULL COMMENT 'id do produto na tbl produtos',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='tbl de equipamento instalado no cliente ' AUTO_INCREMENT=1 ;

--
-- Extraindo dados da tabela `equip_suporte`
--


-- --------------------------------------------------------

--
-- Estrutura da tabela `equip_suporte2`
--

CREATE TABLE IF NOT EXISTS `equip_suporte2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cod_equip` varchar(25) NOT NULL COMMENT 'codigo para controle de equipamento',
  `unid_medida` enum('metros','unidade','peça','pacote') DEFAULT NULL,
  `qtde` int(11) DEFAULT NULL,
  `idantena` int(11) NOT NULL COMMENT 'id do produto na tbl produtos',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='tbl de equipamento instalado no cliente ' AUTO_INCREMENT=1 ;

--
-- Extraindo dados da tabela `equip_suporte2`
--

1 Ответ

1 голос
/ 13 января 2011

Вы можете добавить столько объединений, сколько хотите / нужно, насколько я знаю, что ограничений нет. Тем не менее, он может работать медленнее, в зависимости от объема данных, которые ему необходимо найти. Вы можете заглянуть в INDEXES, чтобы ускорить сопоставление данных между разными таблицами.

Вот пример:

Я предполагаю (возможно, ошибочно, но это не имеет значения для примера), что таблица equipment является основным оборудованием, и, возможно, к нему подключены другие типы оборудования.

Выбор между INNER или LEFT JOIN прост: если во всех этих других таблицах всегда есть запись, вы можете использовать INNER. Если может быть записью, но не обязательно, вы должны использовать LEFT JOIN. Таким образом, вы просто извлечете определенные данные из основной таблицы (SELECT .. FROM main WHERE ..), и если в одной из этих таблиц LEFT JOINed будут совпадения, они будут добавлены к основным результатам.

SELECT
    e.*
  , ea.id AS antena
  , ecu.id AS cable_utp
FROM equipment e
LEFT JOIN equip_antena ea
  ON ea.cod_equip = e.cod_equip
LEFT JOIN equip_cable_utp ecu
  ON ecu.cod_equip = e.cod_equip
WHERE e.id = 1

Это покажет вам информацию из таблицы equipment, где id = 1. Если есть запись equip_antena с тем же идентификатором cod_equip, будет установлен столбец «антенна», в противном случае он будет равен NULL. То же самое касается возможной записи в equip_cable_utp. И вы можете сделать это для всех других таблиц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...