SQL Join命令

时间:2013-06-21 16:26:12

标签: sql sql-server

所以我试图为两个表执行SQL连接命令,但我得到的输出我不是在找。

> 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?

http://i.stack.imgur.com/mfbWW.png

表格结构: 1)承租人表:http://i.stack.imgur.com/BUxMH.png
2)所有者表:http://i.stack.imgur.com/QqoKx.png

3 个答案:

答案 0 :(得分:5)

您不在连接中的两个表之间建立关系。在ON子句中至少需要一个条件才能从条件一侧的第一个表中获得表达式,在条件另一侧使用另一个表中的表达式,如下所示:

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

请注意,这可能不是满足您需求的正确连接条件,因为我们无法从给定信息中了解您可能需要将所有者与租户相关联的其他列。

答案 1 :(得分:1)

看起来(来自其他架构)连接应该在Owner Id上,因此您的查询变为:

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

答案 2 :(得分:0)

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

之后添加DISTINCT