2011-10-03 76 views
-1

我被困在下面的查询中,我需要从不同的表中列出两个属性。有没有更简单的方法来编写上述查询?关系代数查询

Tables: 
Patient (PatientID, FamilyName, GivenName,Address) 
Item (ItemNo, Info, Fee) 
Account (AccountNo, PatientID, Date) 
AccountLine (AccountNo, ItemNo) 

列表中的项目信息和各处理名为约翰·韦恩任何病人日期:

Select FamilyName =” Wayne” and GivenName=”John” (Patient)> Temp1 
     Temp1*Temp1.PatientID = Account.PatientID (Account) > Temp2 

- Updated 

Temp2*Temp2.AccountNo = AccountLine.AccountNo (Temp2 X Account) >Temp3 
Temp3*Temp3.ItemNo = Item.ItemNo (Temp3x Item) > Temp4 
Select Description, Date(Temp4) 

Join Answer 
Select Description, Date (Restrict FamilyName =” Wayne” and GivenName=”John” (Patient) Join Account Join Item Join AccountLine) 
+0

这是一个非常不寻常的符号集 - 你需要解释它是如何工作的为什么第一行有SELECT,第二行没有?)。你需要加入所有四个表格;你现在错过了AccountLine和Item。 –

+1

这功课吗? – Jack

+0

我注意到这个问题已经被编辑了很多次。你所说的“加入答案”看起来很简单,并且会给出正确的结果,所以你似乎已经回答了你自己的问题。正确? – onedaywhen

回答

1

看起来非常像[homework]所以我就提供线索......

不是从表格中选择,您可以选择加入
,具体而言,PatientAccount表格的自然连接将允许查找所有AccountNo和Date值与约翰韦恩有关。
同样,另一个连接将定位给定AccountNo的项目信息。
由于一个连接可以与另一个连接(假设没有冲突),似乎我几乎解决了它...

+0

唉橙色的死亡吧......去年秋天我有DB理论,想测试我的技能:) – Jack

+0

Select FamilyName =“Wayne”and GivenName =“John”(Patient)> Temp1 Temp1 * Temp1.PatientID = Account .PatientID(Account)> Temp2 Temp2 * Temp2.​​AccountNo = AccountLine.AccountNo(Temp2 X Account)> Temp3 Temp3 * Temp3.ItemNo = Item.ItemNo(Temp3x Item)> Temp4 选择说明,日期(Temp4) In这种可能吗? – JLearner

+0

@ user976050我不熟悉您使用的符号。从来没有你越少使用中间变量,从而对一组“自然连接”进行“选择”操作似乎是“医生已下令”的全部操作。 – mjv