I have asked before a question about INNER JOIN and LEFT JOIN, but I still with no answers about the LIMIT to use INNER JOIN and LEFT JOIN in my query.
The Situation: I have 11 tables of different kinds of material that I need to check every time when I need to retrieve information about what material was used in a instalation.
The install have a list of material, sometimes the install is full sometimes not, if full instalation I need to check the eleven possible tables of material, I would like to use a single query, or better a single huge query.
Is it possible?
Thanks anyway, is just a curiosity. :)
[EDITED] *the table structure*
--
-- 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开发者_如何学Python 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`
--
You can add as many joins as you want/need, as far as I know there's no limit. It might get slower though, depending on the amount of data it needs to search through. You can look into INDEXES to speed up matching up data between different tables.
Here's an example:
I'm assuming (maybe wrongfully so, but doesn't matter for the example) that the equipment
table is the main equipment, and it's possible that there are other types of equipment linked to that.
The choice between INNER or LEFT JOIN is simple: if there's always an entry in all these other tables, you can use INNER. If there might be an entry, but there doesn't have to be one, you should use LEFT JOIN. That way you'll simply retrieve certain data from the main table (SELECT .. FROM main WHERE ..
) and if there are matches in one of these LEFT JOINed tables, they'll be added to the main results.
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
This will show you the information from the equipment
table where id = 1. If there's an equip_antena
entry with the same cod_equip
id, the column "antena" will be set, otherwise it will be NULL. The same goes for a possible entry in equip_cable_utp
. And you can do this for all the other tables as well.
精彩评论