oracle - oracle 从多个表中选择
问题描述
如果 p_search_string 与这些字段相同,我有一个函数将返回 mi 家或离开。
FUNCTION SEARACH_FOR_GAMES ( p_search_string in varchar2 )
return weak_cur
IS
SEARCH_FIXID WEAK_CUR;
BEGIN
OPEN SEARCH_FIXID FOR
select HOME,AWAY,COMP_NAME, M_TIME from SOCCER s
where s.HOME LIKE (:p_search_string) or s.AWAY LIKE (:p_search_string)
union all
select HOME,AWAY,LISTS,M_TIME from BASKETBALL b
where b.HOME LIKE (:p_search_string) or b.AWAY LIKE (:p_search_string)
union all
select HOME,AWAY,COMP,M_TIME from HANDBALL h
where h.HOME LIKE (:p_search_string) or h.AWAY LIKE (:p_search_string)
union all
select HOME,AWAY,LISTS,M_TIME from ICE_HOCKEY i
where i.HOME LIKE (:p_search_string) or i.AWAY LIKE (:p_search_string)
union all
select HOME,AWAY,COMP,M_TIME from TENISt
where t.HOME LIKE (:p_search_string) or t.AWAY LIKE (:p_search_string)
union all
select HOME,AWAY,LISTS,M_TIME from VOLLEYBALL v
where v.HOME LIKE (:p_search_string) or v.AWAY LIKE (:p_search_string);
RETURN SEARCH_FIXID;
END SEARACH_FOR_GAMES;
这很好用,但我想知道是否有一种“更好”的方式来写下这些选择?
谢谢
解决方案
就这一要求而言,这绝对是数据模型的一个问题。我可以建议两个选项:
选项# 1: 通过组合所有表创建单个表 SPORTS,并具有一列 sport_type。这将允许在函数中使用一个选择查询。
select HOME,AWAY,COMP_NAME, M_TIME from SPORTS s
where s.HOME LIKE (:p_search_string) or s.AWAY LIKE (:p_search_string)
and sport_type in
(
'SOCCER',
'BASKETBALL',
'HANDBALL',
'ICE_HOCKEY',
'TENIST',
'VOLLEYBALL'
)
选项#2:
Create a view by combining all these tables and select from that view in this function.
CREATE OR REPLACE VIEW VW_SPORTS
AS
select HOME,AWAY,COMP_NAME, M_TIME, 'SOCCER' SPORT_TYPE from SOCCER
union all
select HOME,AWAY,LISTS,M_TIME,'BASKETBALL' SPORT_TYPE from BASKETBALL
union all
select HOME,AWAY,COMP,M_TIME,'HANDBALL' SPORT_TYPE from HANDBALL
union all
select HOME,AWAY,LISTS,M_TIME,'ICE_HOCKEY' SPORT_TYPE from ICE_HOCKEY
union all
select HOME,AWAY,COMP,M_TIME,'TENIST' SPORT_TYPE from TENISt
union all
select HOME,AWAY,LISTS,M_TIME,'VOLLEYBALL' SPORT_TYPE from VOLLEYBALL v;
FUNCTION SEARACH_FOR_GAMES ( p_search_string in varchar2 )
return weak_cur
IS
SEARCH_FIXID WEAK_CUR;
BEGIN
OPEN SEARCH_FIXID FOR
select HOME,AWAY,COMP_NAME, M_TIME from VW_SPORTS s
where s.HOME LIKE (:p_search_string) or s.AWAY LIKE (:p_search_string)
and s.SPOR_TYPE IN
(
'SOCCER',
'BASKETBALL',
'HANDBALL',
'ICE_HOCKEY',
'TENIST',
'VOLLEYBALL'
);
RETURN SEARCH_FIXID;
END SEARACH_FOR_GAMES;
推荐阅读
- python - 将 JSON 正文发布到 Flask 应用程序,抛出“500 - 内部服务器错误”
- javascript - 恢复位置后如何将插入符号移动到具有范围的新行?
- excel - Excel 和本地文件的超链接
- java - 如何使用 POI api 在 excel 中验证特定标题名称的所有列
- python - 固定y轴的比例/大小
- ios - UIColor(named:) 在 iOS 11.0-11.2 上总是返回 nil
- python - 数据存储。尽管对象属性存在于数据存储中,但未找到它
- typescript - 为打字稿定义具有特定模式的索引类型
- django - 两个查询集的 Django 联合不适用于带注释的值
- ios - 如何在应用程序内审查或评价应用程序 - Swift