mysql中的sql自然连接,具有匹配的列

af7jpaap  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(224)

如果我有两个带有主键联接的表,即两个列都有相同的名称和相同的数据,然后我有一个列名timestamp,它对两个表都有相同的名称,但是根据它们的表,数据不同。我还能用自然连接吗?或者是否有一种解决方法考虑到我需要在两个表中都使用select*,而不使用别名?

omqzjyyz

omqzjyyz1#

有许多修复程序,可以组合使用:
•确保每个数据元素名称在其架构中都是unqiue。例如,与其依赖 updated_date 通过出现在句子中的上下文来获得意义的属性 Companies 表的名称 company_name_updated_date .
•将实体属性和审计属性分离到不同的基表中,例如。 company_nameCompanies 表和 company_name_updated_date 在companyesaudit表中。将它们放在不同的模式中也可能有意义。
•使用视图进行防御性编码:这可能是您无论如何都应该做的事情。考虑一组给定的用户(用例、应用程序等)应该可以使用哪些属性,创建一组视图来公开这些属性,并根据需要授予特权。不要将审核列暴露给不需要查看它们的用户。
•在查询中进行防御性编码(“动态”):使用驱动表仅投影查询所需的列,因此,如果向现有列中添加新列,则不会对该查询进行“破坏性更改”。exmaple公司:

WITH c AS ( SELECT company_id, company_name FROM Companies ),
p AS ( SELECT employee_id, company_name FROM Payroll )
SELECT * FROM c NATURAL JOIN p;
jdzmm42g

jdzmm42g2#

不要使用 NATURAL JOIN ! 这是可憎的。它甚至不考虑正确声明的外键关系。
你可以找到 USING 有用的子句:

select . . .
from a join
     b
     using (pk);

另一个问题是 NATURAL JOIN 连接键未列出。如果出现问题,这会使调试代码变得非常困难。您遇到的问题是 TIMESTAMP 列。
如果你使用 USING 你可以用 SELECT * 以及 USING 关键点只在列表中出现一次 SELECT . 有时,这是一种方便。

相关问题