我之前询问过关于INNER JOIN和LEFT JOIN的问题,但是在我的查询中仍然没有关于使用INNER JOIN和LEFT JOIN的LIMIT的答案。
情况:每次我需要检索有关安装中使用的材料的信息时,我需要检查11个不同种类的材料表。
安装有一个材料列表,有时安装有时没有,如果完全安装我需要检查十一个可能的材料表,我想使用单个查询,或者更好的单个巨大查询。 / p>
有可能吗?
无论如何,谢谢,只是好奇心。 :)[EDITED] * 表格结构 *
--
-- 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`
--
答案 0 :(得分:1)
您可以根据需要添加任意数量的连接,据我所知,没有限制。但它可能会变慢,具体取决于它需要搜索的数据量。您可以查看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
id,则将设置“antena”列,否则它将为NULL。同样适用于equip_cable_utp
中的可能条目。您也可以为所有其他表格执行此操作。