gpt4 book ai didi

mysql - 有 INNER JOIN 限制 - 第 2 部分吗?

转载 作者:行者123 更新时间:2023-11-29 14:55:44 24 4
gpt4 key购买 nike

我之前问过有关 INNER JOIN 和 LEFT JOIN 的问题,但我仍然没有关于在查询中使用 INNER JOIN 和 LEFT JOIN 的限制的答案。

情况:我有 11 个不同种类 Material 的表格,每次当我需要检索有关安装中使用的 Material 的信息时,我都需要检查这些表格。

安装有一个 Material 列表,有时安装是完整的,有时不是,如果完整安装我需要检查十一个可能的 Material 表,我想使用单个查询,或者更好地使用单个巨大查询。

可能吗?

无论如何,谢谢,只是好奇。 :)

[已编辑]*表结构*

--
-- 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`
--

最佳答案

您可以根据需要添加任意数量的联接,据我所知没有限制。但它可能会变慢,具体取决于需要搜索的数据量。您可以查看索引来加快不同表之间数据的匹配速度。

这是一个例子:

我假设(可能是错误的,但对于示例来说并不重要)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

这将向您显示 id = 1 的 equipment 表中的信息。如果存在具有相同 cod_equip id 的 equip_antena 条目, “antena”列将被设置,否则将为 NULL。 equip_cable_utp 中的可能条目也是如此。您也可以对所有其他表执行此操作。

关于mysql - 有 INNER JOIN 限制 - 第 2 部分吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4680108/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com