Cra*_*uin 3 sql select one-to-many
想象一下,你有两张桌子,有一对多的关系.
对于这个例子,我建议有两个表:Person和Homes.人员表中包含人员姓名,并为其提供身份证明.家庭表,持有一个人的家庭协会.PID加入"Person.ID"
而且,在这个小小的数据库中,一个人可以没有家,也没有许多家.

我希望我把它画好.
我怎样写一个选择,返回每个人每个指定的户型?
假设这些是homes表中有效的"类型":
小屋,主楼,大厦,太空港.
我想在Person表中返回所有人,他们有一个太空港和一个小屋.
我能想出的最好的是:
SELECT DISTINCT( p.name ) AS name
FROM person p
INNER JOIN homes h ON h.pid = p.id
WHERE 'spaceport' in (
SELECT DISTINCT( type ) AS type
FROM homes
WHERE pid = p.id
)
AND 'cottage' in (
SELECT DISTINCT( type ) AS type
FROM homes
WHERE pid = p.id
)
Run Code Online (Sandbox Code Playgroud)
当我写这篇文章时,它有效,但我很确定必须有更好的方法.
这里的HAVING条款将保证返回的人有两种类型,而不仅仅是其中一种.
SELECT p.name
FROM person p
INNER JOIN homes h
ON p.id = h.pid
AND h.type IN ('spaceport', 'cottage')
GROUP BY p.name
HAVING COUNT(DISTINCT h.type) = 2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |