sql - 如何在查询中动态传递 id
问题描述
在下面的查询中,我需要传递一个动态的 person_id,它必须运行到表中的最后一个 person_id。
select
rb.pk_room_bed_id,rb.fk_hostel_floor_room_id,
hfr.fk_room_type_id,hfr.fk_room_share_type_id,hf.fk_hostel_id,
pba.fk_person_id,rsp.price,rb.vacated_date,rb.allotted_date
from room_bed rb,
hostel_floor_room hfr,
hostel_floor hf,
person_bed_allocation pba,
room_share_price rsp,person ps
where
hfr.pk_hostel_floor_room_id = rb.fk_hostel_floor_room_id and
hf.pk_hostel_floor_id = hfr.fk_hostel_floor_id and
rsp.fk_hostel_id = hf.fk_hostel_id and
rsp.fk_room_share_type_id= hfr.fk_room_share_type_id and
hfr.fk_room_type_id = rsp.fk_room_type_id and
pba.fk_room_bed_id = rb.pk_room_bed_id and
pba.fk_person_id = 1;
解决方案
您可以使用内联子查询来确定该值。我假设最后一个 person_id 来自 person 表,因此请记住:
select
rb.pk_room_bed_id,rb.fk_hostel_floor_room_id,
hfr.fk_room_type_id,hfr.fk_room_share_type_id,hf.fk_hostel_id,
pba.fk_person_id,rsp.price,rb.vacated_date,rb.allotted_date
from
room_bed rb,
hostel_floor_room hfr,
hostel_floor hf,
person_bed_allocation pba,
room_share_price rsp,
person ps
where
hfr.pk_hostel_floor_room_id = rb.fk_hostel_floor_room_id and
hf.pk_hostel_floor_id = hfr.fk_hostel_floor_id and
rsp.fk_hostel_id = hf.fk_hostel_id and
rsp.fk_room_share_type_id= hfr.fk_room_share_type_id and
hfr.fk_room_type_id = rsp.fk_room_type_id and
pba.fk_room_bed_id = rb.pk_room_bed_id and
pba.fk_person_id = (select max (person_id) from person)
此外,您的语法是非 ANSI 的。严格来说,这并没有什么问题,但据我所知,你缺少一个连接。您已列出该person
表,但该表没有连接条件,这意味着您只是调用了交叉连接。我的猜测是这不是你的意思。
ANSI 语法的优点之一是它可以更容易地识别丢失的连接。此查询转换为 ANSI 将显示连接丢失的位置:
select
rb.pk_room_bed_id,rb.fk_hostel_floor_room_id,
hfr.fk_room_type_id,hfr.fk_room_share_type_id,hf.fk_hostel_id,
pba.fk_person_id,rsp.price,rb.vacated_date,rb.allotted_date
from
room_bed rb
join hostel_floor_room hfr on
hfr.pk_hostel_floor_room_id = rb.fk_hostel_floor_room_id
join hostel_floor hf on
hf.pk_hostel_floor_id = hfr.fk_hostel_floor_id
join person_bed_allocation pba on
pba.fk_room_bed_id = rb.pk_room_bed_id
join room_share_price rsp on
rsp.fk_hostel_id = hf.fk_hostel_id and
rsp.fk_room_share_type_id= hfr.fk_room_share_type_id and
hfr.fk_room_type_id = rsp.fk_room_type_id
join person ps on
-- WOA -- someting is missing!
where
pba.fk_person_id = (select max (person_id) from person)
这至少会导致语法错误,而上面的查询可以工作,但会转换为:
cross join person ps
推荐阅读
- python - 从pdf中提取文本到文件
- java - 谁能解释在哪种情况下我们使用 PowerMockito.when() 和 PowerMockito.doReturn()
- selenium - python中的Selenium chromedriver - 不要要求允许多次下载
- react-native - 反应原生地图 onPress 标记掉落问题
- java - Spring 5 中的组件索引与类路径扫描
- node.js - 响应 Express 服务器的 Axios POST 请求返回 404
- c# - 为什么相机不能在 Xamarin WebView 上工作?
- python - 安全有效地替换文件的最佳方法?
- swift - 使用“clip_distance”的 SceneKit 金属着色器
- laravel - Laravel:构建控制器时合同文件不可实例化