2011-10-15 81 views
0

我有两个表MYSQL来自同一列中选择多个值作为行

table COMMUNITY 
    id, 
    name, 
    etc. 

table PROPERTY 
    id, 
    community_id, 
    type, 
    price, 
    rate, 
    etc. 

有四种可能的属性类型和社区可以有信息的一个或多个不同的类型。

我想弄清楚如何将每个社区的信息合并为一行。 比如我可能希望得到一排,其中包括

community.id,community.name,condo.price,condo.rate,town_home.price,town_home.rate

当然有不是condotown_home的表格,属性类型在属性表中由列表示,并且社区可以具有多个属性行。

我的第一个想法是使用别名在表上多个连接,但我似乎无法得到任何正常工作。

有什么建议吗?

回答

3

您可以使用左连接。

SELECT c.id, c.name, condo.price, condo.rate, town_home.price, town_home.rate 
FROM Community c 
LEFT JOIN Property condo ON condo.community_id = c.id AND condo.type = 'condo' 
LEFT JOIN Property town_home ON town_home.community_id = c.id AND town_home.type = 'town_home' 
+0

谢谢!我假设最后一次加入应该有town_home.type或可能没关系,因为它是同一张表。 – christian

+0

是的。我的错 :) – ysrb

0

试试这个:

SELECT * FROM community LEFT OUTER JOIN property ON community.id = property.community_id; 

这应加入ID字段中的两个表,所以你应该有一个完整的行所有的信息。如果任何内容为空,它也应该出现在行中。如果使用相同的社区ID列出多个属性,则他们都应该出现在结果中。

PS - 我使用PostgreSQL而不是MYSQL,因此语法可能有点不同。让我知道它是如何工作的!

+0

这包括结果中的所有信息,但不包括在一行中。谢谢。 – christian

1

我是谁不喜欢多用连接,可能是因为我看不出有任何理由为使用它们或作为我不会需要它的那种人。 以任何方式,这是我愿意把它的方式:

当你有两个表之间的链接,你可以用它们给你带来你所需要的数据,只要你有这个链接,您可以带来任何你想要的领域。

,你说你想要的字段: community.idcommunity.namecondo.pricecondo.ratetown_home.pricetown_home.rate

SELECT 
     community.id, 
     community.name, 
     condo.price, 
     condo.rate 
    FROM 
     community, property condo 
    WHERE 
     community.id = condo.community_id; 

这应该解决这个问题。

相关问题