MYSQL从同一列中选择多个值作为行

时间:2011-10-15 23:40:32

标签: mysql select join

我有两张桌子

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 个答案:

答案 0 :(得分: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'

答案 1 :(得分: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;

这应该解决它。

答案 2 :(得分:0)

试试这个:

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

这应该加入ID字段上的两个表,因此您应该有一个包含所有信息的完整行。如果有任何东西,它也应该出现在行中。如果列出的多个属性具有相同的社区ID,则它们都应出现在结果中。

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