有两张表,通过联合查询得到查询数据,但如果另一张表中的数据删除和修改,那么查询结果的修改出就显示不出来,如何才能然修改后查询结果的某个查不到数据段显示“未定义”。
可能说的不是很清楚,上图打个比方吧
表Name:
表Type:
sql语句:select Name,TypeName from Name,Type where Name.TypeId=Type.TypeId
得到结果:此时如果把表Type中TypeId的3改为4,或者删除,查询的结果就变成了
 
我想让dd也显示,但是在typename这里显示个“未定义”,请问能否做到SQLselect联合查询

解决方案 »

  1.   


    select n.Name,
    TypeName=case when t.TypeName IS NULL then '未定义' else t.TypeName end
    from Name n
    LEFT JOIN [Type] t
    on n.TypeID=t.TypeID

    /*
    Name    TypeName
    aa 猫
    bb 猫
    cc 狗
    dd 未定义
    */
      

  2.   

    如果两边的数据都要是用FULL OUTER JOIN 
      

  3.   

    大侠,我发现这里如果我再街上查询条件的时候,即最后加上and(where t.typename like ……)的时候,其他不符合条件的都变成了未定义了,这里要把那些不符合的拿掉,应该如何写呢
      

  4.   

    大侠,我发现这里如果我再街上查询条件的时候,即最后加上and(where t.typename like ……)的时候,其他不符合条件的都变成了未定义了,这里要把那些不符合的拿掉,应该如何写呢
    create table Name(Name nvarchar(20),TypeId int)
    insert into Name values('aa',1)
    insert into Name values('bb',1)
    insert into Name values('cc',2)
    insert into Name values('dd',3)
    create table [Type](TypeId int, TypeName nvarchar(20))
    insert into [Type] values (1,'猫')
    insert into [Type] values (2,'狗')
    insert into [Type] values (3,'鱼')update Name set TypeId=4 where Name='dd'select n.Name,         
    TypeName=case when t.TypeName IS NULL then '未定义' else t.TypeName end
    from Name n     
    LEFT JOIN [Type] t     
    on n.TypeID=t.TypeID
    INNER JOIN Name m
    on n.Name=m.Name
    where m.Name like 'a%'/*
    Name TypeName
    aa 猫
    */