SELECT crime_name || 'Was Committed On' ||, crime_date, victim.firstname AS "VICTIM" || 'Is The Victim', ||witness.firstname AS "WITNESS" || 'Witnessed The Crime' ||, Suspect.firstname AS "SUSPECT" || 'Is Suspected Of Committing The Crime' || FROM Crime, Victim, Witness, Suspect
WHERE victim.crime_no = crime.crime_no AND witness.crime_no = crime.crime_no AND suspect.crime_no = crime.crime_no;
任何人都可以帮助我吗?我不断得到遗漏的表达错误,我似乎无法弄明白。任何帮助将不胜感激。
我顺便使用oracle Apex
谢谢!
答案 0 :(得分:1)
您有多个字段,||
和,
分隔它们。您应该删除冗余运算符:
SELECT crime_name || ' Was Committed On ' || crime_date,
victim.firstname AS "VICTIM" || ' Is The Victim',
witness.firstname AS "WITNESS" || ' Witnessed The Crime',
Suspect.firstname AS "SUSPECT" || ' Is Suspected Of Committing The Crime'
FROM Crime, Victim, Witness, Suspect
WHERE victim.crime_no = crime.crime_no AND
witness.crime_no = crime.crime_no AND
suspect.crime_no = crime.crime_no;
答案 1 :(得分:0)
试试这个:
SELECT crime_name || ' Was Committed On ' || crime_date,
victim.firstname || ' Is The Victim' AS "VICTIM" ,
witness.firstname || ' Witnessed The Crime' AS "WITNESS",
Suspect.firstname || ' Is Suspected Of Committing The Crime' AS "SUSPECT"
FROM Crime, Victim, Witness, Suspect
WHERE victim.crime_no = crime.crime_no AND
witness.crime_no = crime.crime_no AND
suspect.crime_no = crime.crime_no;
别名必须在最后。
答案 2 :(得分:0)
以前发布的答案已回答管理多个表之间一对一关系输出的具体问题:CRIME
,VICTIM
,WITNESS
和{{1 }}。我发现这个模式的问题空间很有趣,并且想要扩展初始设计以考虑一些"真实的"用例和场景。
由于此OP最初被标记为oracle-apex问题,因此展示如何将半复杂模式结构放入Apex页面设计或报告中可能也很有用。
以下解决方案是OP的扩展,以考虑在SUSPECT
,VICTIM
和WITNESS
内有多个记录可能与给定匹配的情况下显示输出的可能性犯罪。
新要求:让我们在设计中包含四个实体(并将三个实体合并):
犯罪报告实体 :这是记录被调查犯罪详情的实物记录(无论是书面还是电子记录)。我假设这是由OP构建的串联字符串背后的想法。
SUSPECT
...(改编自@mureinik先前发布的解决方案)
还包括一些额外的假设,即可能针对同一罪行提交许多不同的报告:多个执法代表可能会分开调查任务,或者提交完全不同的报告,彼此独立。在这种情况下,相关的CRIME仍然是相同的,但每个帐户将是唯一不同的报告。
人员实体: 为 VICTIMS , SUSPECTS 和 WITNESSES分隔三个不同的表在查询犯罪实例或报告的完整帐户时添加了更多联接。这也混淆了一个更简单的共性,即这三个表中的任何人也只是" PERSONS"
员工角色关联实体: 执法人员和人员是一种特殊的“人物”和“#34;在这个数据模型中。它们具有与一般人员实体池无关的特殊元信息,例如
SELECT crime_name || ' Was Committed On ' ||
to_char(crime_date,'MM/DD/YYYY) || victim.firstname ||
' Is The Victim. ' || witness.firstname ||
' Witnessed The Crime. ' || Suspect.firstname ||
' Is Suspected Of Committing The Crime.'
(OFC。,DET。,INV。或其他一些等级指定等)STAFF_TITLE
(警官,侦探,调查员等)STAFF_ROLE
这个会影响与员工姓名相关联的LOV。随着时间的推移,相同的员工将退出,从晋升或过渡到不同的能力。他们的头衔和职级应该遵循它们。 犯罪协会实体: 每条DATE_ASSIGNED/SUSPENDED
条记录都与犯罪报告相关联,并具有角色,例如VICTIM,SUSPECT和WITNESS ..
通过这些DDL SQL语句指定架构设计以满足OP和新要求:(以.csv格式的示例数据)
DOJ_CRIME表
PERSON
DOJ_PERSON表
CREATE TABLE "DOJ_CRIME"
( "CRIME_NO" NUMBER(15,0) NOT NULL ENABLE,
"CRIME_DETAIL" VARCHAR2(100),
"LOCATION" VARCHAR2(40),
"DATE_REPORTED" DATE NOT NULL ENABLE,
CONSTRAINT "DOJ_CRIME_PK" PRIMARY KEY ("CRIME_NO") ENABLE
)
/
"CRIME_NO","CRIME_DETAIL","LOCATION","DATE_REPORTED"
"21","Kidnapping","WOODBURY, PA","01/31/2014"
"4","Domestic Violence","LIBERTY CITY, PA","01/30/2014"
"2","Grand Theft Auto","LIBERTY CITY, PA","02/25/2014"
"1","Suspected Arson Event","BOSTON, MA","02/25/2014"
"3","Aggravated Assault and Battery","PHILADELPHIA, PA","03/01/2014"
DOJ_STAFF_ROLE表
CREATE TABLE "DOJ_PERSON"
( "PERSON_ID" NUMBER(10,0) NOT NULL ENABLE,
"PERSON_NAME" VARCHAR2(100) NOT NULL ENABLE,
"DATE_OF_BIRTH" DATE,
"DATE_ADDED" DATE,
"DATE_MODIFIED" DATE,
CONSTRAINT "DOJ_PERSON_PK" PRIMARY KEY ("PERSON_ID") ENABLE
)
/
"PERSON_ID","PERSON_NAME","DATE_OF_BIRTH","DATE_ADDED","DATE_MODIFIED"
"1","PATRICK GUILBERT","","01/10/2014",""
"2","STEFANO MILAN","","01/10/2014",""
"3","ORLANDO VIGO","","01/10/2014",""
"4","RACHEL MARTIN","","01/10/2014",""
"5","LOUIS HATCHER","","01/10/2014",""
"6","MOIRA BOUVIER","","02/04/2014",""
"7","RHETT BUTLER","","02/04/2014",""
"8","PATRICIA NASH","","02/04/2014",""
"9","WANDA YAVISH","","02/04/2014",""
"10","CARL GRIMES","","02/25/2014",""
"11","KIMBERLY POTTS","","02/25/2014",""
"12","VANDER NEILS","","02/25/2014",""
"13","CLARK HENDERSON","","02/25/2014",""
"14","SARAH BLACKTHORNE","","02/25/2014",""
"15","KILLIAN LAGER","","02/25/2014",""
"16","PHILLIP FOGBAY","","02/25/2014",""
"17","CHARLES HARRIS","","03/02/2014",""
"18","PENNY SHALE","","03/02/2014",""
"19","LAWRENCE NEVILLE","","03/02/2014",""
"20","BONNIE DEWITT","","03/02/2014",""
"21","JUNE LEWIS","","03/02/2014",""
"22","TARA YOUNG","","03/20/2014",""
"23","WENDY NORRIS","","03/20/2014",""
"24","AIDEN LIGHTFOOT","","03/20/2014",""
DOJ_CRIME_REPORT表
CREATE TABLE "DOJ_STAFF_ROLE"
( "PERSON_ROLE_ID" NUMBER(10,0) NOT NULL ENABLE,
"PERSON_ID" NUMBER(10,0) NOT NULL ENABLE,
"STAFF_ROLE" VARCHAR2(40) NOT NULL ENABLE,
"STAFF_TITLE" VARCHAR2(40) NOT NULL ENABLE,
"DATE_ASSIGNED" DATE NOT NULL ENABLE,
"DATE_SUSPENDED" DATE,
CONSTRAINT "DOJ_STAFF_ROLE_PK" PRIMARY KEY ("PERSON_ROLE_ID") ENABLE
)
/
ALTER TABLE "DOJ_STAFF_ROLE" ADD CONSTRAINT "DOJ_STAFF_ROLE_FK" FOREIGN KEY ("PERSON_ID")
REFERENCES "DOJ_PERSON" ("PERSON_ID") ENABLE
/
"PERSON_ROLE_ID","PERSON_ID","STAFF_ROLE","STAFF_TITLE","DATE_ASSIGNED","DATE_SUSPENDED"
"21","16","OFFICER","OFC.","02/25/2014",""
"1","1","DETECTIVE","DET.","02/01/2014",""
"2","8","INVESTIGATOR","LT.","02/04/2014",""
"22","11","INVESTIGATOR","SGT.","02/25/2014",""
"23","5","OFFICER","OFC.","01/15/2014",""
DOJ_CRIME_ASSOC表
CREATE TABLE "DOJ_CRIME_REPORT"
( "REPORT_ID" NUMBER(10,0) NOT NULL ENABLE,
"CRIME_NO" NUMBER(10,0) NOT NULL ENABLE,
"INVESTIGATOR" NUMBER(10,0) NOT NULL ENABLE,
"FILE_ID" VARCHAR2(50),
"DISPOSITION" VARCHAR2(40),
"CRIME_DESCRIPTION" VARCHAR2(100) NOT NULL ENABLE,
"REPORT_DATE" DATE NOT NULL ENABLE,
CONSTRAINT "DOJ_CRIME_REPORT_PK" PRIMARY KEY ("REPORT_ID") ENABLE
)
/
ALTER TABLE "DOJ_CRIME_REPORT" ADD CONSTRAINT "DOJ_CRIME_REPORT_FK" FOREIGN KEY
("CRIME_NO")
REFERENCES "DOJ_CRIME" ("CRIME_NO") ENABLE
/
ALTER TABLE "DOJ_CRIME_REPORT" ADD CONSTRAINT "DOJ_CRIME_REPORT_FK2" FOREIGN KEY
("INVESTIGATOR")
REFERENCES "DOJ_STAFF_ROLE" ("PERSON_ROLE_ID") ENABLE
/
"REPORT_ID","CRIME_NO","INVESTIGATOR","FILE_ID","DISPOSITION","CRIME_DESCRIPTION","REPORT_DATE"
"1","4","21","AFK-TCPIP-1025","FILED","Responded to call for backup at a Liberty City residence. Detained suspect for further questioning.","02/01/2014"
这是一个样本"犯罪报告"使用此架构在APEX中设计。可以通过犯罪数据库的其他离散值来搜索复杂的搜索页面。基于 CREATE TABLE "DOJ_CRIME_ASSOC"
( "CRIME_ASSOC_ID" NUMBER(10,0) NOT NULL ENABLE,
"REPORT_ID" NUMBER(10,0) NOT NULL ENABLE,
"PERSON_ID" NUMBER(10,0) NOT NULL ENABLE,
"PRIMARY_ROLE" VARCHAR2(40) NOT NULL ENABLE,
CONSTRAINT "DOJ_CRIME_ASSOC_PK" PRIMARY KEY ("CRIME_ASSOC_ID") ENABLE,
CONSTRAINT "DOJ_CRIME_ASSOC_UK1" UNIQUE ("REPORT_ID", "PERSON_ID", "PRIMARY_ROLE") ENABLE
)
/
ALTER TABLE "DOJ_CRIME_ASSOC" ADD CONSTRAINT "DOJ_CRIME_ASSOC_FK" FOREIGN KEY ("REPORT_ID")
REFERENCES "DOJ_CRIME_REPORT" ("REPORT_ID") ENABLE
/
ALTER TABLE "DOJ_CRIME_ASSOC" ADD CONSTRAINT "DOJ_CRIME_ASSOC_FK2" FOREIGN KEY ("PERSON_ID")
REFERENCES "DOJ_PERSON" ("PERSON_ID") ENABLE
/
"CRIME_ASSOC_ID","REPORT_ID","PERSON_ID","PRIMARY_ROLE"
"22","1","18","WITNESS"
"1","1","22","VICTIM"
"21","1","3","SUSPECT"
"2","1","12","WITNESS"
的报告将是基本搜索条件之一,可能如下所示:
报告ID的犯罪报告,(TOP)
报告ID的犯罪报告,(完)
涉及的较大查询之一是标题为"报告信息"的部分。但是,所涉及的每个实体之间的数据关系中的连接数和灵活性更少:
报告信息区域SQL查询
REPORT_ID
为此解决方案创建 select DOJ_CRIME_REPORT.REPORT_ID as REPORT_ID,
DOJ_CRIME_REPORT.CRIME_NO as CRIME_NO,
DOJ_STAFF_ROLE.STAFF_TITLE || ' ' ||
DOJ_PERSON.PERSON_NAME as ASSIGNED_STAFF,
DOJ_CRIME_REPORT.FILE_ID as FILE_ID,
DOJ_CRIME_REPORT.DISPOSITION as DISPOSITION,
DOJ_CRIME_REPORT.CRIME_DESCRIPTION as CRIME_DESCRIPTION,
DOJ_CRIME_REPORT.REPORT_DATE as REPORT_DATE
from DOJ_PERSON DOJ_PERSON,
DOJ_STAFF_ROLE DOJ_STAFF_ROLE,
DOJ_CRIME_REPORT DOJ_CRIME_REPORT
where DOJ_CRIME_REPORT.INVESTIGATOR = DOJ_STAFF_ROLE.PERSON_ROLE_ID
and DOJ_STAFF_ROLE.PERSON_ID = DOJ_PERSON.PERSON_ID
and DOJ_CRIME_REPORT.REPORT_ID = :P13_REPORT_ID
数据模式的方法将有助于构建用于创建各种犯罪报告以在此数据库中存储的LOV查询。
合并NORMALIZED
和PERSONS
等常见实体概念会减少连接数,并降低重复值的可能性(即在多个表中定义的相同人员)。
关联表也减少了重复数据的创建。存储在这些链接实体中的唯一内容是单个ROLES
值/键。
利用APEX页面设计,使用不同的页面区域将单个复杂查询拆分为彼此独立的离散部分,但公共引用键/ id除外。 (例如ID
)。这会跳过用于管理可选数据关系的大多数外连接。
提示:构建共享LOV查询,而不是在输入页面上的每个项目中对其进行编码。许多这些值被多次使用,否则会导致不必要的重复。
快乐编码......!