2012-03-26 1 views
0

私は2つのテーブルEXERCISEとEXERCISEUSERを持っています。私はすべての運動項目を列挙し、その運動がテーブルEXERCISEUSERに存在する場合に返すクエリに追加のフィールドを入れる必要があります。つまり、ユーザーがその運動をしたかどうかを知る必要があります。そうであれば、EXERCISEUSERに行があります。他のテーブルでROWSの数を取得

私の現在のクエリは次のとおりです。

SELECT 
    "E".*, 
    "T"."NAME" AS "LEVEL" 
FROM 
    "EXERCISE" AS "E" 
INNER JOIN 
    "EXERCISETYPE" AS "T" 
ON 
    E.STO_FK_EXERCISETYPEEXERCISE = T.PK_EXERCISETYPE 
INNER JOIN 
    "LEVEL" AS "L" 
ON 
    L.PK_LEVEL = E.STO_FK_LEVELEXERCISE 
WHERE 
    (
     E.STATUS = 1) 
AND (
     L.STATUS = 1) 
AND (
     L.PK_LEVEL = 5) 
ORDER BY 
    "T"."ORDER" ASC 

私もPK_USERを提供します。

ありがとうございます!


私はサブクエリを使用して、私が望む結果に到達します。

SELECT 
    "E".*, 
    "T"."NAME" AS "LEVEL", 
    (SELECT COUNT(*) FROM STOUSER.EXERCISEUSER AS EU WHERE EU.STO_FK_EXERCISEEXERCISEUSER = E.PK_EXERCISE AND EU.STO_FK_USEREXERCISEUSER = 5978) AS MAKE_EXER_NUM 
FROM 
    "STOUSER"."EXERCISE" AS "E" 
INNER JOIN 
    "STOUSER"."EXERCISETYPE" AS "T" 
ON 
    E.STO_FK_EXERCISETYPEEXERCISE = T.PK_EXERCISETYPE 
INNER JOIN 
    "STOUSER"."LEVEL" AS "L" 
ON 
    L.PK_LEVEL = E.STO_FK_LEVELEXERCISE 
WHERE 
    (
     E.STATUS = 1) 
AND (
     L.STATUS = 1) 
AND (
     L.PK_LEVEL = 5) 
ORDER BY 
    "T"."ORDER" ASC 

ありがとう!

+1

最後の編集が問題の解決である場合は、それを回答として投稿し、元の質問に編集する代わりに回答としてマークしてください。 – turbo

+0

相関サブクエリは、クエリに最も効率の悪い方法であることが多く、代わりに派生テーブルを使用します。そして、select *を決して使用しないでください! – HLGEM

+0

クエリオプティマイザだけがそれを判断することができます。 –

答えて

0

これはLEFT OUTER JOINで行うべきだと思います。

関連する問題