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

Sql server SQL Server-如何确定两个表之间的共享密钥?,sql-server,crystal-reports,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

例如,如果我想链接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的表结构:

ODLN表结构:
您需要了解这两个表的结构。在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';

或取消的任何有效值。但是如果不知道您想要的查询或者不了解更多关于这些列的含义,我真的无法提供建议。这些表看起来完全相同,这表明加入它们是不寻常的。

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

谢谢,我使用exec sp_help为我要加入的表调出数据结构。我刚刚用截图更新了我的帖子。我如何判断哪些列是外键?谢谢你的解释。因此,我试图创建一个业务报告,将销售订单与采购订单以及交货单据链接起来。销售订单是我公司销售的货物。采购订单是我们从供应商处购买的货物。链接的目的是确认采购订单在提交SO后已发货(因此是交货单)。希望这能澄清一点。你没有权限访问设计这个数据库的人吗?(这是一个家庭作业问题吗?)我想DocNum列是您想要使用的列,因为它是唯一的其他整数列。例如,一个表中的DocEntry=另一个表中的DocNum,但这只是猜测。如果使用外键正确设置,我希望信息会显示在您看到主键信息的位置。我只是想知道数据库中是否有所有表关系的详细映射。一些海报建议我查看信息模式?你是对的,这里有主键约束。所有3个表都以DocEntry作为主键。我试着用ORDR&OPOR做一个内部连接,然后左连接ODLN&OPOR,但是数据看起来是错误的。我没有正确使用连接吗?如果不知道您的查询、预期结果和实际结果,这是不可能的。这也引出了另一个问题。我想补充一下@QCDATA所说的,通常将主键从一个表连接到第二个表中的另一列。在您的情况下,表似乎完全相同,因此有点不寻常。@Ilion-这是有道理的。假设我想加入ORDR和OPOR。我将使用ORDR的主键与OPOR的外键连接。如何在OPOR表中找到这个外键?我用一个例子扩展了我的另一个答案。SAP是它自己的动物。这里的SQL Server和Crystal报告都是些花言巧语。看见