SQL Repetition,如何在查询中避免?

时间:2014-04-18 20:41:55

标签: sql database oracle11g

我试图获取表中存储的名称和地址,但却重复数据。我不知道如何避免它作为这个领域的新手。这里有一些命令和结果的图片。

命令:

enter image description here

结果:

enter image description here

所有者表:

enter image description here

地址表:

enter image description here

请帮帮我:(

P.S。它们都是虚拟数据。

2 个答案:

答案 0 :(得分:4)

您需要使用相互引用的表中的列在两个表所有者和地址之间进行连接。

SELECT firstname,lastname,addressline_1
FROM owners o
JOIN addresses a
ON o.colName=a.colName

您的查询在两个表之间执行笛卡儿产品,为表所有者中的每一行提供表地址的所有行。< / p>

如果您使用推荐的ANSI SQL语法使用 ON 子句而不是 WHERE 子句执行连接,那么您将避免获得无意义的行。虽然您还没有指定加入表之间的条件,但使用 WHERE 子句加入的旧语法仍然成功执行但在使用 ON 子句时会抛出错误

See this thread for detailed discussion ON vs WHERE

修改

根据您的表格架构,查询将是

SELECT firstname,lastname,addressline_1
FROM owners o
JOIN addresses a
ON o.ownerid=a.owners_ownerid

答案 1 :(得分:1)

您必须在查询中添加where子句: -

SELECT OWNERS.first_name, OWNERS.last_name, ADDRESSES.address_line1
FROM OWNERS, ADDRESSES
WHERE OWNERS.ownerid = ADDRESSES.owners_ownerid

或者您可以使用join

SELECT OWNERS.first_name, OWNERS.last_name, ADDRESSES.address_line1
FROM OWNERS
JOIN ADDRESSES
ON OWNERS.ownerid = ADDRESSES.owners_ownerid