2014-04-02 82 views
0

我正在做一個類的查詢,我需要根據他們是否擁有吉娃娃來選擇寵物所有者的名字。我不得不使用兩個表,PetOwner和Pet。 PetOwner擁有所有者編號(ownerNo),所有者名稱(oLName,oFName),Pet擁有所有者編號和petType。這裏是我嘗試使用代碼:「 - 線忽略其餘‘未知的命令錯誤 - SQL +/Oracle

SELECT 
    PetOwner.oFName, 
    PetOwner.oLName 
FROM 
    PetOwner, 
    Pet 
WHERE 
    PetOwner.ownerNo = (SELECT 
          Pet.ownerNumber 
         FROM 
          Pet 
         WHERE 
          Pet.petType = 'Chihuahua' 
         ); 

錯誤說’未知的命令開頭」 Pet.petTyp ...我知道這個問題出現在WHERE子句中,但我似乎無法調整它的工作方式,我相信答案很明顯。

我只是需要第二組眼睛來看看它。

我該怎麼做?

+0

什麼樣的未知的錯誤,例如錯誤的號碼:spxxxxx – jmail

+0

我想在子查詢,你沒有寫頂端的語句和檢測用=操作這一結果。它有什麼區別? – AK47

+0

爲您的子查詢表提供別名。看看我的答案詳細信息。 – SpiderCode

回答

1

您的查詢中:

SELECT PetOwner.oFName, PetOwner.oLName 
FROM PetOwner, Pet 

你在這裏提到的表 '寵物'。不應該在這裏提到表'Pet',因爲您正在從'PetOwner'表中選擇oFName和oLName,而不是'Pet'。

一個簡單的連接查詢會給你正是你想要的。不需要以上述方式使用子查詢。在Pet.petType爲'Chihuahua'的條件下,您需要根據PetOwner.ownerNo = Pet.ownerNumber將Pet表加入PetOwner表中。

因此,完成查詢:

SELECT po.oFname, po.oLName 
FROM PetOwner as po 
JOIN Pet as p 
ON po.ownerNo = p.ownerNumber 
WHERE p.petType = 'Chihuahua'  
0
SELECT oFName, oLName 
FROM PetOwner 
WHERE ownerNo = (SELECT ownerNumber FROM Pet WHERE petType = 'Chihuahua'); 
+0

評論:一些解釋什麼是錯誤的將不勝感激。我可能會理解,但這不是我們想要的,只是複製和粘貼您的代碼。這個想法是OP應該理解這個問題。 – ElmoVanKielmo

0

下面的查詢工作對我來說:

SELECT ownername 
FROM PetOwner 
WHERE PetOwner.ownerNo = (SELECT Pet.ownerNo FROM Pet WHERE Pet.petType = 'Chihuahua'); 

問候。

0

您的查詢令人困惑的SQL爲哪個寵物選擇父親或孩子。在你的子查詢提供子表的別名如下所述:

SELECT 
    PetOwner.oFName, 
    PetOwner.oLName 
FROM 
    PetOwner, 
    Pet 
WHERE 
    PetOwner.ownerNo = (SELECT 
          p.ownerNumber 
         FROM 
          Pet p 
         WHERE 
          p.petType = 'Chihuahua' 
         );