1

假设我有以下情况:我有一些城市有建筑物。每个城市被划分为区。每个区都应该有一个“主屋”(每个区一个)。

我有(sql server 2005)一个相应的关联表CITY_BUILDS (IDCITY, IDBUILD)
我还有一个建筑物表BUILD (ID, DISTRICT, IS_MAIN, COLOR)

所以,说市长决定用区列表中第一栋房子的颜色重新粉刷各区的“主屋”(疯狂的想法,但无论如何)

我需要在一个城市 foreach 区中选择“主屋”,然后搜索第一个区的房屋,查看它的颜色并绘制主屋。

我为我的程序开始了一个存根,但很快就感到困惑......

DECLARE L_CURSOR CURSOR FAST_FORWARD FOR
SELECT B.DISTRICT, B.IS_MAIN, B.ID 
FROM BUILD B 
    INNER JOIN CITY_BUILDS C_B 
        ON B.ID = C_B.IDBUILD                   
WHERE IDCITY = 142 --AND B.IS_MAIN=1
ORDER BY DISTRICT

PS。第一栋建筑,我的意思是 CITY_BUILDS 列表中的任何第一次出现......另外,“第一”房子不应该是 MainHouse 本身......

聚苯乙烯。我使用了一个游标,因为一旦我在实际项目中获得了这对 (ID_MAIN_HOUSE - ID_FIRST_HOUSE),我需要用这两个参数和颜色调用一个存储过程......

4

1 回答 1

1

假设主区的 IS_MAIN 为 1,我认为您可以使用一条更新语句完成所有这些操作

UPDATE B
SET COLOR = M.COLOUR
FROM CITY_BUILDS C  -- get city
-- get main
INNER JOIN BUILD M ON M.ID = C.IDBUILD AND M.IS_MAIN =1
 -- get others join them to city and main district
INNER JOIN BUILD B ON C.ID = C.IDBUILD AND C.IS_MAIN <> 1 AND M.DISTRICT = B.DISTRICT 
-- if you really only need one city then uncomment following 
--WHERE C.IDCITY = 142
于 2012-09-25T09:40:38.237 回答