0

ある程度問題なく機能しているSQLクエリがあります。

LEFT OUTER JOINは正常に機能しますが、mdl_modulesまたはmdl_resourceにレコードがない場合は、NULLが発生します。

どちらのLEFTOUTERJOINにもレコードがない場合、mdl_course_modulesからレコードを除外するにはどうすればよいですか?

ISNULL()を使用すると思いますが、クエリに組み込む正しい構文がわかりません。

これが私の質問です:

SELECT SQL_CALC_FOUND_ROWS ".str_replace(" , ", " ", "cm.id AS theid, m.name AS mname, r.name AS resourcename, r.summary AS resourcesummary,
        FROM_UNIXTIME(cm.added, '%D %M %Y') AS dateadded")."
        FROM mdl_course_modules cm 
        LEFT OUTER JOIN mdl_modules m on cm.module = m.id
        LEFT OUTER JOIN mdl_resource r on cm.instance = r.id
        WHERE m.name = 'resource' AND cm.visible = 1
        $scourse
        $sWhere
        $sOrder
        $sLimit
4

2 に答える 2

1

通常、これはに切り替えることで実現されますINNER JOININNER JOIN、MySqlではaと同等であるCROSS JOINため、実際には役に立ちません。

WHEREこの問題を解決するには、次を使用して目的の条件を追加しますISNULL

SELECT ...
    FROM_UNIXTIME(cm.added, '%D %M %Y') AS dateadded")."
    FROM mdl_course_modules cm 
    LEFT OUTER JOIN mdl_modules m on cm.module = m.id
    LEFT OUTER JOIN mdl_resource r on cm.instance = r.id
    WHERE m.name = 'resource' AND cm.visible = 1
        && (!ISNULL(m.name) || !ISNULL(r.name))
于 2012-05-15T09:20:09.903 に答える
1

WHERE m.name ='resource' AND cm.visible = 1 AND(m.id IS NOT NULL OR r.id IS NOT NULL)

于 2012-05-15T09:49:29.257 に答える