2013-11-26 350 views
0

作为练习,我正在为动物园创建数据库。我有一个Animal表,动物园位置ZLoc和移动记录Mrec表。 Zloc表具有一个称为region的属性。我正在尝试SELECT“北方”地区的所有动物。以下是我尝试,但它并没有产生预期的结果:加入SQL Dev查询

SELECT 
    nickname, region 
FROM 
    Animal 
    JOIN MRec USING (Animal_ID) 
    JOIN ZLoc USING (ZLoc_ID) 
WHERE region IN ‘North’; 

nickname是动物名称的属性。 Mrec充当动物和Zloc之间的关联。

为了澄清我使用的Oracle SQL Developer 而且我已经确定了单一的“报价”是正确的

+1

请发布错误 – Sico

+0

对于初学者来说,* North *的引号是错误的。使用普通的单引号,例如''North'' – Phil

+1

请勿使用USING。我知道这很酷,但是在更复杂的查询中变得混乱。 – Strawberry

回答

1

IN要求括号为IN ('North')。还要确保您使用的是撇号而不是多字节卷曲的引号。

+0

我刚刚尝试过这一点,但我仍然收到“无效标识符”错误。我认为你对括号是正确的!谢谢! – user3038436

0

我对你的数据/表格设置不是很乐观,但是为了选择北方所有的区域(loc_id)的动物,这应该可以做到。它将选择所有动物,然后加入移动表(MRec),然后加入到位置表(ZLoc)。您可能需要更新字段的名称,但这应该将您的目标撤回。

SELECT A.NICKNAME, Z.REGION 
FROM ANIMAL A 
LEFT JOIN MRec M ON M.NICKNAME = A.NICKNAME 
LEFT JOIN ZLoc Z ON Z.LOC_ID = M.LOC_ID 
WHERE Z.LOC_ID = 'North' 
0

试试这个:

SELECT nickname, region 
FROM Animal inner JOIN MRec 
ON animal.animal_ID=MRec.Animal_ID 
ON MRec.zloc_ID = zloc.zloc_ID 
WHERE zloc.region = 'north' 
0

这工作:

SELECT nickname, region 
FROM Animals 
JOIN MRec ON MRec.Animal_ID = Animals.id 
JOIN ZLoc ON MRec.Zloc = ZLoc.id 
WHERE ZLoc.region LIKE 'North' 

Fiddle

1

随着错误消息状态,这个问题是与表结构本身,SQL错误: ORA-00904:“ZLOC”。“REGION”:无效标识符00904. 00000 - “%s:无效标识符”

暗示列:Zloc-> region不可用。

ORA-00904: invalid identifier 
Cause: The column name entered is either missing or invalid. 
Action: Enter a valid column name. A valid column name must begin with a letter, be less than or equal to 30 characters, and consist of only alphanumeric characters and the special characters $, _, and #. If it contains other characters, then it must be enclosed in double quotation marks. It may not be a reserved word.