簡體   English   中英

MySQL使用帶有更新的子查詢

[英]MySql using subquery with update

我有這個桌子病人,必須查詢

更新數據庫,以便為擁有2個以上患者的房間中的所有患者提供3%的折扣。

該表如下所示:

CREATE TABLE patient (
    sin varchar(20) NOT NULL,
    disease varchar (20),
    bed varchar (20),
    room varchar (20),
    hospital varchar (0),
    fee varchar(20),
    entry_date date NOT NULL,
    exit_date date,
    CONSTRAINT FOREIGN KEY (sin) REFERENCES person(sin)
) 

因此,我想找到所有能容納2位患者的患者病房,然后更新表格:

UPDATE patient C
INNER JOIN patient D ON C.sin=D.sin and D.sin IN (SELECT A.sin
                            FROM patient A
                            WHERE 2 < (SELECT COUNT(B.sin)
                                        FROM patient B
                                        WHERE A.hospital=B.hospital and A.room=B.room and A.exit_date IS NULL and B.exit_date IS NULL)
    )
SET C.fee=C.fee*0.97

問題是我遇到了錯誤:

您不能在FROM子句中指定目標表“ C”進行更新

有沒有辦法在更新中使用子查詢? 非常感謝你。

您走在正確的軌道上。 但是您想加入房間信息,而不是患者信息。 所以:

UPDATE patient p JOIN
       (select hospital, room
        from patient
        where exit_date is null
        group by hospital, room
        having count(*) > 2
       ) r
       ON p.hospital = r.hospital and p.room = r.room
    SET p.fee = p.fee * (1 - 0.03)
    WHERE exit_date is null;

即使@Gordon Linoff給出了正確的答案,也可能是最好的答案,但在問完問題后我還是有了一個主意。 從我需要在同一個房間至少有3個人的那一刻起,我將檢查情況是否如此,然后一一更新:

UPDATE patient A, patient B, patient C
SET A.fee=A.fee*0.97
WHERE A.sin <> B.sin and A.sin <> C.sin and B.sin <> C.sin
    and A.room=B.room and A.room=C.room
    and A.hospital=B.hospital and A.hospital=C.hospital
    and A.exit_date IS NULL and B.exit_date IS NULL and C.exit_date IS NULL

像這樣說:這個答案是解決我的問題的方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM