这应该不难,但不知怎的,我无法做到这一点。所以我有两个表:Splanning_Buildings
和Splanning_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()函数?
有什么想法吗? 谢谢!
答案 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
我简化了你的表名 - 希望你仍然可以理解它。 ; - )