在不同的表中使用相同的字段名称然后进行联合查询是否存在任何问题?

时间:2018-09-20 20:16:23

标签: mysql sql database mysql-workbench

我有多个共享相同字段名称和类型的表。除了名称table1table2以外,这些表完全相同。我将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-%'
           );

在这种情况下是否有任何错误或应采取的预防措施?

到目前为止,我没有看到任何问题。除非我曾经在table3语句中错误地将第三个表名FROM像这样(table3类似于table1table2)。

FROM table1, table2, table3

尽管我将其包含在FROM中,但未使用它,也未建立联合关系。刚加入table1table2

与从FROM语句中删除table3时得到的结果有所不同。

1 个答案:

答案 0 :(得分:1)

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

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

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