SQL连接命令

SQL连接命令,sql,sql-server,Sql,Sql Server,因此,我试图对两个表执行一个SQLJOIN命令,但得到的输出不是我想要的 > SELECT owners_table.ownerID, tenant_table.tenantID, tenant_table.apt_num, tenant_table.last_name, owners_table.last_name AS owner_last, tenant_table.phone, owners_table.phone

因此,我试图对两个表执行一个SQLJOIN命令,但得到的输出不是我想要的

> SELECT        owners_table.ownerID, tenant_table.tenantID, tenant_table.apt_num, tenant_table.last_name, owners_table.last_name AS owner_last, tenant_table.phone, 
                         owners_table.phone AS owner_phone
FROM            owners_table INNER JOIN
                         tenant_table ON tenant_table.apt_status = 'ARCHIVED' AND owners_table.owner_status = 'ARCHIVED'
ORDER BY owners_table.apt_num"
在输出中,它显示了5条“stralman”记录,但只有一条。我知道join子句试图匹配它,但是有没有一种方法可以只为5条相应的记录显示1个stralman

表结构: 1) 租户表:

2) 所有者表:

您不在联接中的两个表之间建立关系。ON子句中至少需要一个条件,才能在条件的一侧具有来自第一个表的表达式,在条件的另一侧具有来自另一个表的表达式,如下所示:

FROM owners_table 
INNER JOIN tenant_table ON tenant_table.apt_num = owners_table.apt_num

请注意,这可能不是适合您需要的连接条件,因为我们无法从给定的信息中知道您可能需要哪些其他列来将所有者与租户关联起来。

如果除了返回的记录数之外,查询的所有内容都是正确的,请尝试在SELECT

这个词后面添加DISTINCT(从其他模式)联接应位于OwnerId上,因此您的查询变成:

SELECT owners_table.ownerID, 
    tenant_table.tenantID, 
    tenant_table.apt_num, 
    tenant_table.last_name, 
    owners_table.last_name AS owner_last, 
    tenant_table.phone, 
    owners_table.phone AS owner_phone
FROM owners_table 
INNER 
JOIN tenant_table 
    ON tenant_table.OwnerID = owners_table.OwnerID
WHERE tenant_table.apt_status = 'ARCHIVED' 
AND owners_table.owner_status = 'ARCHIVED'
ORDER BY owners_table.apt_num

这是因为您的
tenantID
有多个,该名称的不同值。您是否尝试使用左联接?我们可以查看您的表结构吗?添加到原始POST的表结构如果您使用图像示例DISTINCT将不起作用,因为每一行在技术上是唯一的。因此“tenant\u table.apt\u status=”ARCHIVED“和owners\u table.owner\u status=”的条件不是有效的关系条件?这两个表之间没有任何关联。您只是说从每个状态为“存档”的表中获取记录,然后将所有记录合并到笛卡尔乘积中。关系条件需要指定tenant_表中的某个值等于owners_表中的某个值,如Joel states的示例所示。好的,这很有意义。因此,您建议我在建立关系后如何检查存档记录?该条件可以放在WHERE子句中。