未知的命令错误 - SQL / Oracle

时间:2014-04-02 06:34:27

标签: mysql sql oracle sqlplus

我正在查询一个类,我需要根据他们是否拥有奇瓦瓦狗来选择宠物主人名字。

我必须使用两个表,PetOwner和Pet。 PetOwner拥有所有者编号(ownerNo),所有者名称(oLName,oFName),Pet拥有所有者编号和petType。这是我试图使用的代码:

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

错误显示“未知命令开始”Pet.petTyp ...“ - 其余行被忽略。”我知道问题出现在WHERE子句中,但我似乎无法将其调整到可行的位置,我确信答案是显而易见的。

我只需要第二眼就可以看一遍。

我该怎么做?

4 个答案:

答案 0 :(得分: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'    

答案 1 :(得分:0)

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

答案 2 :(得分:0)

以下查询对我有用:

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

问候。

答案 3 :(得分:0)

您的查询混淆了用于选择父对象或子对象的SQL的SQL。在子查询中为子表提供别名,如下所述:

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