2

私はこのSQLリクエストを持っています:

select T1.ID, T2.ID 
from task t1, task t2
join workcase w on W.ID = T1.WORKCASE_ID
where W.ID = 1683964476
and T1.STATE < 501
and T2.STATE = 501

しかし、実行すると、次のエラーが発生します。

ORA-00904: "T1"."WORKCASE_ID": invalid identifier

ここで何が問題なのですか?

4

3 に答える 3

6

JOIN問題は、構文が混在していることです。T1と の間に暗黙的な結合 (コンマ) をT2使用し、明示的なJOIN構文を使用してworkcaseテーブルに結合しています。

構文はJOINカンマよりも優先されるため、結合条件でエイリアスを使用しようとしてもエイリアスは使用できません。

両方を使用する必要がある場合は、次を使用する必要があります。

select T1.ID, T2.ID 
from
(
  select T1.ID, T2.ID, T1.WORKCASE_ID
  from task T1, task T2
  where T1.STATE < 501
    and T2.STATE = 501
) t
inner join workcase w 
  on W.ID = T1.WORKCASE_ID
where W.ID = 1683964476

これにより、サブクエリで暗黙的な結合が可能になり、workcaseテーブルへの明示的な結合を使用できます。

または、@APC がコメントで述べているように、これは次のように記述することもできますCROSS JOIN

select T1.ID, T2.ID 
from task T1
cross join task T2
inner join workcase w 
  on W.ID = T1.WORKCASE_ID
where W.ID = 1683964476
  and T1.STATE < 501
  and T2.STATE = 501
于 2013-02-07T11:35:34.327 に答える
-1

無効な識別子は、テーブルにその列名 (WORKCASE_ID) がないことを意味します

于 2013-02-07T11:30:30.550 に答える
-1

大文字と小文字の区別はどうですか??

テーブルは「t1」を使用してエイリアス化されていますが、その後「T1」として参照されています...

ただの提案... :)

于 2013-02-07T11:34:12.810 に答える