在不同的表中使用相同的字段名然后进行联合查询有什么问题吗?

8ftvxx2r  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(353)

我有多个表共享相同的字段名和类型。这些表除了名称外完全相同: table1 以及 table2 . 我会的 SHOW CREATE TABLE table1 :

CREATE TABLE `table_!` (
  `ip` varchar(500) NOT NULL,
  `description` varchar(500) DEFAULT NULL,
  `type` varchar(500) DEFAULT NULL,
  PRIMARY KEY (`ip`),
  UNIQUE KEY `ip_UNIQUE` (`ip`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

我确实会这样进行联合查询(虽然联合语法很旧,但我在整个项目中一直在使用它,所以我不喜欢现在进行更改):

SELECT COUNT(`table2`.`ip`)
FROM `ips`.`table2`, `ips`.`table1`
WHERE `table2`.`ip` = `table1`.`ip`
       AND (LOWER(`table1`.`description`) NOT LIKE 'str1%' 
             AND (LOWER(`tabl1`.`description`) LIKE '%-str2-%' 
                   OR LOWER(`table1`.`description`) LIKE '%-str3-%'
                 )
            )
       AND (LOWER(`table2`.`description`) LIKE 'str1%'
            AND LOWER(`table2`.`description`) NOT LIKE '%-str2-%' 
            AND LOWER(`table2`.`description`) NOT LIKE '%-str3-%'
           );

在这种情况下,有什么不对的地方或我应该采取的预防措施吗?
到目前为止,我还没有看到任何问题。只不过有一次我错取了第三个表名 table3FROM 像这样的声明(也是 table3 类似于 table1 以及 table2 ).

FROM table1, table2, table3

虽然我把它收录在《从》里,但没有使用它,也没有提出连带关系。刚加入 table1 以及 table2 .
我得到的结果与我移除时不同 table3 从from语句。

ldioqlga

ldioqlga1#

在不同的表中可以(而且通常会)使用相同的列名。您应该使用简短的别名以使引用更清晰:

SELECT count(b.ip) 
FROM   ips.table1 a, ips.table2 b 
WHERE  a.ip = b.ip 
   --  ...

当您添加另一个表table3时,输出将不同,因为您刚刚向数据集添加了另一个维度。您还应该在特定列上联接此表,但是,除非是一对一,否则您将返回不同数量的行。

相关问题