2010-12-08 8 views
0
SELECT pr.id as process_id, 
      lo.update_time as start_date, 
      REPLACE(sc.message, 'ip.ip.ip.ip', lo.variables) as message, 
      sc.code 
    FROM logs AS lo 
LEFT JOIN processes AS pr ON lo.process_id = pr.id 
LEFT JOIN status_codes AS sc ON lo.status_code_id = sc.code 
ORDER BY lo.id DESC 
    LIMIT 14 

このクエリの問題は、NULL値のないそのテーブルの自動インクリメントプライマリキーでも、すべてのNULL値としてprocess_idを返すことです。 pr.idNULLであるMySQL:NULLで主キーを返す

答えて

6

使用SELECT lo.process_idないSELECT pr.id as process_id

行は、レコードがprocesses prテーブルに存在しないためのものです。

あなたはLEFT OUTER JOINではなく、あなたがLEFT JOINを使用しているINNER JOIN

2

を使用しているため、これらはで保持されます。したがって、logsまたはstatus_codeテーブルのいずれかの行に、対応する行がlogsテーブルにない場合は、NULLの値がprocessesになります。