0

私は次のようなことをしようとしています:

select fred.name
  , fred.emp_num
from fred
  , joe
  , (select * from
      (select yr_bonus
        , 1 grade
      from mark 
      where mark.department = fred.department)
      union
      (select
        0 yr_bonus
        , 2 grade
      from dual)
    ) pay
where fred.division = joe.division
and fred.grade = pay.grade;

これはうまくいきません。select の 2 レベルの深さから mark.department を fred.department に結び付ける方法がわかりません。どうすればこれを達成できますか?

4

2 に答える 2

2

FROM 句では別のテーブルにアクセスできないため、WHERE 句で JOINS または結合テーブルを使用する必要があります。さらに、あなたのクエリは正しくないようです。何をしようとしているのか説明してください。

私の理解が正しければ、クエリは次のように書き直すことができます。

select fred.name
  , fred.emp_num
from fred
  , joe
where fred.division = joe.division
and ((fred.grade = 1 and fred.department in (select department from mark) 
or (fred.grade = 2))
于 2013-06-14T13:52:05.327 に答える
1
SELECT  fred.name
,       fred.emp_num
FROM    fred
JOIN    joe
ON      fred.division = joe.division
JOIN
(
        SELECT  *
        FROM
        (
            SELECT  yr_bonus
            ,       1 grade
            FROM    mark
            UNION
            SELECT  0 yr_bonus
            ,       2 grade
            FROM    dual
        ) mark
        JOIN    fred
        ON      mark.department = fred.department
) pay
ON      fred.grade = pay.grade;
于 2013-06-14T14:24:09.607 に答える