2012-03-02 83 views
-3
CREATE TABLE [dbo].[Country](
     [Id] [int] NOT NULL, 
     [name] [varchar](50) NULL) 

    CREATE TABLE [dbo].[State](
     [Id] [int] NOT NULL, 
     [name] [varchar](50) NULL, 
      [CountryId] [int] NULL references Country(Id)) 

    CREATE TABLE [dbo].[City](
     [Id] [int] NOT NULL, 
     [name] [varchar](50) NULL, 
      [StateId] [int] NULL references State(Id)) 

Value in table 

国家交叉连接的SQL查询

------- 
1 USA 
2 UK 

国家

----- 
1 NY 1 
2 NSW NULL 

----- 
1 Sydney 2 
2 Mumbai NULL 
3 Delhi 1 

现在我想的City.Name,State.Name,Country.Name名单也有NULL值。

e.g悉尼新南威尔士州NULL 德里美国纽约 避免重复记录

我尝试这个查询,但有些错误在里面:

SELECT  Country.name, City.Name AS Expr1, State.Name AS Expr2 
FROM   City CROSS JOIN 
         State CROSS JOIN 
         Country 
WHERE  (City.StateId IN 
          (SELECT  StateId 
           FROM   City AS City_1)) OR 
         (State.CountryId IN 
          (SELECT  CountryId 
           FROM   State AS State_1)) 
+0

@MartinSmith:这不是告诉我NULL值。 – 2012-03-02 18:14:29

+0

我不知道他们在面试中问我多少正确的问题。 – 2012-03-02 18:15:22

+0

发布您的查询。 – 2012-03-02 18:18:05

回答

2
SELECT  C2.name, C.Name AS Expr1, S.Name AS Expr2 
FROM   City c 
LEFT OUTER JOIN State s ON c.stateid = s.id 
LEFT OUTER JOIN Country c2 on s.countryId = c2.id 
+0

嗨Rs:这是不正确working.I改变我的查询,请看看它 – 2012-03-02 18:49:24