在我們的程序中,我們在表'Person'和表'Phonem'之間建立了多對多關係。這通過一個連接表'PersonPhon'來實現。Oracle與LEFT OUTER JOIN的故障
人:
PERSID
NAME
FIRSTNAME
DATEOFBIRTH
TYPE
[...]
PersonPhon:
PEPHPERSID <-- references the person
PEPHPHONID <-- references the phonem
Phonem:
PHONID
PHONEM
由於一個bug,最近的一些人是沒有各自Phonem條目的參考依然存在。爲了從數據庫中讀取它們,我創建了一個聲明:
select p.persid from
Person p left outer join PersonPhon ph
on p.persid = ph.pephpersid
where p.type = 'natural'
這種說法是爲了給我所有的人在PersonPhon沒有相應的條目,並且,與試驗數據(只是不PersonPhon條目人)這個作品好。然而,聲明還選擇人員,如果他們有PersonPhon項目,所以我想我的聲明有錯誤,但我無法弄清楚什麼是錯的。
編輯:
條目:
與人表
PERSID | NAME | FIRSTNAME | AGE | TYPE (other columns ommitted)
76257713 | Wilko | Roger| 30 | natural
76257714 | Martian | Marvin | 50 | natural
PersonPhon-表
PEPHPERSID | PEPHPHONID
76257713 | 21000
76257713 | 26000
Phonem-表
PHONID | PHONEM
21000 | 4875122
26000 | 7468112
most entries omitted (> 100000)
通過以上數據,該聲明得到:
76257713
76257713
76257714
這是意外行爲。預計將只是76257714
。
如果PersonPhonem,表是空的,它提供了:
76257713
76257714
其中看起來像預期的行爲,但似乎是誤導。
您可以發佈您的數據集和預期產出? – SriniV
我也想看看WHERE子句。 – jarlh
在where條款和信息中添加了疑問 – Scorpio