连接两个没有链接的表,即SQL Server Management Studio中的主键

连接两个没有链接的表,即SQL Server Management Studio中的主键,sql,sql-server,join,Sql,Sql Server,Join,我想知道如何查询两个没有主键链接的表。这些表来自同一个数据库,我需要将TreeNodeDiscription与employeeid匹配,以便在我得到大量重复和不真实的值时,结果返回为真,我认为这是因为没有链接。任何帮助都将不胜感激 SELECT DISTINCT EMPLOYEE.EMPLOYEECODE, TREENODEDESCRIPTION.TREENODEDESCRIPTION2 FROM EMPLOYEE CROSS JOIN T

我想知道如何查询两个没有主键链接的表。这些表来自同一个数据库,我需要将TreeNodeDiscription与employeeid匹配,以便在我得到大量重复和不真实的值时,结果返回为真,我认为这是因为没有链接。任何帮助都将不胜感激

SELECT DISTINCT 
    EMPLOYEE.EMPLOYEECODE, 
    TREENODEDESCRIPTION.TREENODEDESCRIPTION2
FROM         
    EMPLOYEE 
CROSS JOIN
    TREENODEDESCRIPTION
ORDER BY 
    EMPLOYEE.EMPLOYEECODE

得到的是返回所有行的笛卡尔连接。无论主键还是外键,都需要指定要连接的列

有关联接的更多信息,请参阅本文:


首先,执行联接不需要在列上有关系链接。联接基于布尔条件。如果布尔条件为true,则发生连接


也就是说,我怀疑您真正的问题在于您使用的联接类型。交叉连接将连接双方的每一场比赛和每一场比赛。根据您所追求的内容,您更可能需要内部联接或左联接。

在交叉联接中,一个表中的每条记录都要与另一个表中的每条记录联接。如果每个表有10条记录,则会得到100个匹配结果

更常见的联接是
内部联接

SELECT DISTINCT
  employee.EmployeeCode,
  TreeNodeDescription.TreeNodeDescription2
FROM
  Employee
INNER JOIN
  TreeNodeDescription
    ON Employee.EmployeeID = TreeNodeDescription.TreeNodeDescription2

如果您自己指定要如何关联表,则外键或主键的存在不会为您自动执行此操作。它们仅用于在数据库上强制执行某些规则,以保持数据库处于一致状态。

只需在公共字段上加入即可-不需要FK或其他关系

SELECT DISTINCT 
     e.EmployeeCode,
     t.TreeNodeDescription2
FROM         
    dbo.Employee e
INNER JOIN
    dbo.TreeNodeDescription t ON e.EmployeeID = t.TreeNodeScription
ORDER BY 
    e.EmployeeCode

为什么使用交叉连接?我使用交叉连接是因为DBMS不允许我使用其他类型的连接。我刚刚在design query editor中快速创建了它,它产生了相同的联接?不要使用查询设计器。只需单击“新建查询”并在编辑窗口中键入查询。你们很好!上述查询将正常工作,但可能是我的数据库出错,它没有返回值:(正如您所说,可能是EmployeeID中的值与TreeNodeDescription2中的值不匹配。@Tyrone2011:您可以将内部联接替换为完全联接。这样,您就可以看到两个表中的所有值。如果它们匹配,它们将显示在同一行上,如果不匹配,则其中一列将包含NULL。如果确实没有匹配项,则其中一列将包含NULL。)在这两个表之间,所有行都将包含一个值和一个空值,但至少您有机会亲眼看到为什么没有匹配项。