我有三个关系为GradParent(Country)> Parent(State)> Child(People)的表。我试图通过国家名称实现查询以获取以下情景和订单的独特信息。
1.所有人的数据与他们的国家和国家。
2.如果州没有人员,则州和国家数据。
3.如果没有国家和/或人民,那么只是国家数据。与多个外连接的SQL查询
SQL:
SELECT DISTINCT P1.ID as COUNTRY_ID, P1.NAME AS COUNTRY_NAME, P2.ID AS STATE_ID,
P2.Name AS STATE_NAME , I1.ID AS PEOPLE_ID, I1.NAME AS PEOPLE_NAME
FROM dbo.Country P1
INNER JOIN dbo.State P2
ON P2.Country_ID = P1.ID
INNER JOIN dbo.People I1
ON I1.Country_ID = P1.ID
<!-- WHERE P1.Name like 'USA%'--- optional-->
ORDER BY P1.NAME
试图改变你的'INNER JOIN's为'LEFT JOIN's – Shnugo
像其他评论说/已经回答,你需要什么(生产与无状态的国家行,并没有为国家/国家我们会编辑它以反映出来,然后,你的数据模型没有被标准化(这不好),PEOPLE表只能有state_id;每个国家的国家已经显示在STATE表中,在PEOPLE中重复这些关系至多是多余的,最坏的情况是相互矛盾的,我认为这是某种功课;我不喜欢你的老师,他们用这样的表教坏习惯 – mathguy
- 你的数据库产品是什么?你同时拥有SQL Server和Oracle,这实际上是正确的(只有两个)约1%的病例。 – mathguy