【问题标题】:SQL insert query with some condition具有某些条件的 SQL 插入查询
【发布时间】:2020-05-02 20:13:34
【问题描述】:

我正在使用 MySQL。

显示了三个表:Patient、Occupies、Room 和 Privte_Patient。我需要确定第一个可用房间并将房间分配给一个新入院的患者,PIN 码为“314”(该患者已添加到数据库中)。请注意,房间应该是单人入住还是多人入住,具体取决于患者是否私人。

  • 因此,我想要获取 SQL 查询,它将 PIN '314' 的患者分配到 1 号房间。 因为该患者不是私人患者,1 号房间是第一个房间有空床(大小为 2 张床)。

知道如何识别这个房间吗?我可以使用条件插入吗?

卧床病人

+-------+----------+ |密码 |姓名 | +-------+----------+ |314 |拉娜 | |778899 |迈克尔 | |345566 |琼斯 | +-------+----------+

餐桌占用

+--------+--------+ |病人 |房间 | +--------+--------+ |778899 | 1 | |345566 | 4 | +-------+----------+

餐桌室

+--------+--------+ |号码 |尺寸 | +--------+--------+ | 1 | 2 | | 2 | 12 | | 3 | 1 | | 4 | 1 | +-------+----------+

Private_Patient

+--------+--------+ |病人 |顾问| +--------+--------+ |345566 | 345566 | +-------+----------+

【问题讨论】:

  • 请添加预期结果,以便我可以更有效地帮助您
  • 你想要什么返回房间 2 因为它的容量最大,或者 1 因为它的数量最少,必须有一个算法来确定选择哪个房间
  • @nbk 我想返回房间 1,因为这个病人不是私人病人,房间 1 是第一个有空床的房间(房间 1 的大小是 2 张床)。

标签: mysql sql database join sql-insert


【解决方案1】:

考虑:

insert into occupies(patient, room)
select 314, r.number
from room r
left join (select room, count(*) size from occupies group by room) o
    on o.room = r.number
where coalesce(o.size, 0) < r.size
order by r.number
limit 1

对于每个房间,查询会显示入住人数,并使用该信息过滤出已满的房间。选择第一个至少有床的房间。

使用相关子查询可能更容易理解:

insert into occupies(patient, room)
select 314, r.number
from room r
where r.size > (
    select count(*)
    from occupies o
    where o.room = r.number
)
order by r.number
limit 1

【讨论】:

  • @IgorM 谢谢!我可以使用 WHERE 子句而不是 JOIN 操作来做同样的事情吗?
  • @NinoGorgiashvili:我正在输入这个解决方案,而您正在发表评论。请参阅我的答案中的第二个查询。
【解决方案2】:
INSERT INTO Occupies(room, patient) 
    SELECT number, '314'
        FROM Room r
        INNER JOIN 
             (SELECT room, COUNT(patient) amountOfPatientsInRoom from Occupies GROUP BY 
                room) ON 
                    o.room = r.number
        WHERE r.size < o.amountOfPatientsInRoom
        LIMIT 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 1970-01-01
    相关资源
    最近更新 更多