我有多个共享相同字段名称和类型的表。除了名称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-%'
);
在这种情况下是否有任何错误或应采取的预防措施?
到目前为止,我没有看到任何问题。除非我曾经在table3
语句中错误地将第三个表名FROM
像这样(table3
类似于table1
和table2
)。
FROM table1, table2, table3
尽管我将其包含在FROM中,但未使用它,也未建立联合关系。刚加入table1
和table2
。
与从FROM语句中删除table3
时得到的结果有所不同。
答案 0 :(得分:1)
您可以(并且将经常在不同的表中使用)相同的列名。 您应该使用简短的别名来使引用更清晰:
SELECT count(b.ip)
FROM ips.table1 a, ips.table2 b
WHERE a.ip = b.ip
-- ...
添加另一个表table3时,输出将有所不同,因为您刚刚向数据集添加了另一个维度。您还应该将此表连接到特定的列,但是同样,除非一对一,否则您将返回不同数量的行。