繁体   English   中英

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

[英]Is there any problem in using same field names in different tables then make joint query?

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

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

到目前为止,我没有看到任何问题。 除了一次我在这样的FROM语句中错误地将第三个表名table3 (也是table3table1table2相似)。

FROM table1, table2, table3

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM