3

BusStop、BusRoute、Stop_Routeの3つのテーブルがあります(M-2-M関係の場合)。一部の停車地には関係(ルート)がないため、関係があるかどうかに応じて、BusStopテーブルの各レコードをビット値1または0で更新する必要があります。関係のないすべてのストップを選択するクエリがあります。

SELECT
    BusStop.StopId 
FROM
    BusStop
    LEFT OUTER JOIN BusStop_BusRoute 
    ON BusStop.StopId = BusStop_BusRoute.StopId
WHERE 
    BusStop_BusRoute.StopId IS NULL

しかし、この結果に基づいて価値を付加する方法がはっきりとわかりません。CURSORステートメントとCASEWHENステートメントについて読みましたが、私の場合、それらをどのように適用するかがわかりません。その値を挿入する必要があるビットのStopStatus列タイプがあります。

4

2 に答える 2

3
UPDATE BusStop
SET StopStatus = 
    CASE 
        WHEN BusStop_BusRoute.StopID IS NULL THEN 0 
        ELSE 1 
    END
FROM 
    BusStop
    LEFT JOIN BusStop_BusRoute 
    ON BusStop.StopId = BusStop_BusRoute.StopId
于 2012-09-19T10:33:32.927 に答える
0

あなたは次のようなことをすることができます

UPDATE BusStop SET BitValue = 0 WHERE StopID in 
(
--your query
SELECT
    BusStop.StopId 
FROM
    BusStop
    LEFT OUTER JOIN BusStop_BusRoute 
    ON BusStop.StopId = BusStop_BusRoute.StopId
WHERE 
    BusStop_BusRoute.StopId IS NULL
)

これが(私が思うに)あなたのものに似た完全なコードです。1つのテーブル。iが1の場合、最後のクエリでビットが1に設定されます。

create table aaa(id int identity, i int, j int, b bit)

insert into aaa values(1, 0, 0), (0, 0, 0), (0, 1, 0), (0, 0, 0)

select * from aaa

update aaa set b = 1 where id in (
select id from aaa where i = 1)
于 2012-09-19T10:39:31.357 に答える