三个表的内连接(或交叉)

时间:2013-06-17 20:50:28

标签: sql sqlite

我有一个包含三个名为NameAddressPhoneNameAddressAgeAgeSex的表的数据库。

  • NameAddressPhone包含nameaddressphone列。
  • NameAddressAge包含nameaddressage列。
  • AgeSex包含age列和sex

我正在尝试编写一个(SQLite)查询来查找姓名,地址和年龄,以便名称和地址同时显示在NameAddressPhoneNameAddressAge中,以便显示年龄在NameAddressAgeAgeSex中。我可以使用inner join到达那里(即有两张桌子),但我只涉及SQL,并希望得到专家的帮助。我见过solutions that appear to be similar,但并不完全遵循他们的逻辑。

提前致谢。

克里斯

2 个答案:

答案 0 :(得分:1)

我想你只想把它们放在明显的键上:

select *
from NameAddressPhone nap join
     NameAddressAge naa
     on nap.name = naa.name and
        nap.address = naa.address join
     (select distinct age
      from AgeSex asx
     ) asx
     on asx.age = naa.age

这是在AgeSex中选择不同年龄以防止行增殖。据推测,一个年龄可能会在该表中出现多次,这会导致输出中的行重复。

答案 1 :(得分:1)

我假设你的桌子有以下布局

NameAddressPhone
================
Name
Address
Phone

NameAddressAge
==============
Name
Address
Age

AgeSex
======
Age
Sex

如果我正确理解所有内容,解决方案可能看起来像这样:

SELECT P.Name, P.Address, P.Phone, A.Age, S.Sex
FROM NameAddressPhone P
INNER JOIN NameAddressAge A ON P.Name = A.Name AND P.Address = A.Address
INNER JOIN AgeSex S ON A.Age = S.Age

请注意,如果AgeSex中有多个具有相同年龄的行,则加入AgeSex可能会产生重复的行。例如,没有办法区分21和男性21和女性。

我希望我能提供帮助,这就是你要找的。