我有两张桌子
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
当然没有condo
或town_home
的表,属性类在属性表中由列表示,社区可以有多个属性行。
我的第一个想法是使用别名在表上使用多个连接,但我似乎无法获得任何正常工作。
有什么建议吗?
答案 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.id
,community.name
,condo.price
,condo.rate
,town_home.price
,town_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,因此语法可能有点不同。让我知道它是如何工作的!