sql server从两个表中选择null或value

时间:2015-07-17 16:37:55

标签: sql-server join

这应该不难,但不知怎的,我无法做到这一点。所以我有两个表:Splanning_BuildingsSplanning_RoomData。 Splanning_Buildings表中OBJECTID的主键在Splanning_RoomData表中表示为Objectid_bldg。

我需要的是从Splanning_Buildings表中选择所有行,如果在Splanning_RoomData表中找到它的值,则将值显示为“Existing”字符串;但如果在Splanning_RoomData中找不到,则显示为空白。

这是SQL Server 2012。

这是我的sql:

SELECT t1.objectid, name, t2.building_n  FROM splanning_buildings t1 LEFT JOIN splanning_roomdata t2 ON t1.objectid = t2.objectid_bldg WHERE t2.objectid_bldg IS NULL

SELECT t1.objectid, name, t2.building_n  FROM splanning_buildings t1 LEFT JOIN splanning_roomdata t2 ON t1.objectid = t2.objectid_bldg 

第一个查询返回splanning-buildings表中的所有行,但splanning_RoomData表中存在的行除外;所以t2.building_n是'null'。有道理。

第二个查询返回buildings表中的所有行,但返回多个t2.buildings_n行。

这些都不是理想的结果!我想我需要某种SQL Case()函数?

有什么想法吗? 谢谢!

2 个答案:

答案 0 :(得分:1)

  SELECT t1.objectid, name,
        CASE WHEN (EXISTS(SELECT TOP(1) 1 FROM splanning_roomdata t2 WHERE     t1.objectid = t2.objectid_bldg )) THEN 
        'Exists'
        ELSE 'Not exists' END AS [status]
    FROM splanning_buildings t1

答案 1 :(得分:0)

select objectid, 
  (select top 1 1 from room_data 
   where objectid_bldg=objectid) 
  as roomdata_exists from buildings 

我简化了你的表名 - 希望你仍然可以理解它。 ; - )