SQL Server - 如何确定2个表之间的共享密钥?

时间:2017-03-09 23:23:13

标签: sql-server crystal-reports

例如,如果我想链接OPOR,ORDR& ODLN但不知道它们之间的共同关键是什么,我怎么能找到它呢?

示例:

SELECT o0.NumAtCard 'Customer PO' 
    , o0.DocNum 'Sales Order No'
    , o1.DocNum 'Purchase Order No'
    , o2.DocNum 'Delivery Order No'
    , o0.DocTotal 'Total Price'
FROM ORDR o0 
JOIN OPOR o1 ON o0.primarykey = o1.foreignkey -- left?
JOIN ODLN o2 ON o1.primarykey = o2.foreignkey -- inner?

如何确定“primarykey”和“foreignkey”是什么?

OPOR的表格结构: enter image description here

ODLN表结构: enter image description here

2 个答案:

答案 0 :(得分:0)

您需要知道两个表的结构。在SQL server中:

sp_help TableA;
sp_help TableB;

在MySQL中:

describe TableA;
describe TableB;

这将显示表结构。如果数据库设计得很好,您应该能够确定哪些列是外键。

根据您发布的结果了解要加入的列:

1)你可能期待一些不存在的东西。 2)它取决于你想做什么。假设您想要将OPOR中的行与ODLN中的行匹配,在ODLN中将它们标记为已取消,您可以选择:

select * from OPOR 
inner join ODLN on 
OPOR.DocEntry=ODLN.DocEntry 
where CANCELLED='true';

或取消的有效值是什么。但是,如果不知道您想要的查询或更多地了解这些列的含义,我无法提出建议。这些表似乎完全相同,这表明加入它们是不寻常的。

答案 1 :(得分:0)

如果向下滚动sp_help结果,则应该看到约束。如果存在主键约束,请查看它使用的键。主键通常是用于链接到另一个表的键。