2

所以我试图为两个表执行 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"

In the output, it displays 5 records of 'stralman', but there is only one. I understand the join clause is trying to match it up but is there a way to display only 1 stralman for the 5 corresponding records?

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

table structure: 1) tenant table: http://i.stack.imgur.com/BUxMH.png
2) owners table: http://i.stack.imgur.com/QqoKx.png

4

3 回答 3

5

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

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

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

于 2013-06-21T16:35:25.657 回答
1

看起来(从那里的架构)联接应该在 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
于 2013-06-21T17:58:20.320 回答
0

如果除了返回的记录数之外,关于查询的所有内容都是正确的,请尝试在单词 SELECT 之后添加 DISTINCT

于 2013-06-21T16:37:22.790 回答