0

私はこのクエリを使用していくつかの情報を返します:

select tick.ticketid 'Ticket', tick.subject 'Sujet', FROM_UNIXTIME(tick.dateline)     'Reception', FROM_UNIXTIME(logs1.dateline) 'Verification', FROM_UNIXTIME(logs2.dateline)     'Debut trait.',
FROM_UNIXTIME(logs3.dateline) 'Fin trait.', tick.prioritytitle 'Priorite',  tick.tickettypetitle 'Genre', tick.timeworked/60 'Temps de travail', tick.fullname  'Createur'
from swtickets tick, swticketauditlogs logs1, swticketauditlogs logs2, swticketauditlogs logs3
where tick.ticketid = logs1.ticketid 
and tick.ticketid = logs2.ticketid
and tick.ticketid = logs3.ticketid
and logs1.actionmsg like '%to: Pre-analysis%'
and (logs2.actionmsg like '%to: Handled%' or logs2.actionmsg like '%to: In Progress%')
and (logs3.actionmsg like '%to: Pre-closed%' or logs3.actionmsg like '%to: Closed%')
group by tick.ticketid

swticketauditlogsテーブルの3倍を選択します。これは、クエリの各行に対して、テーブルの同じ列の3倍が必要ですが、他の条件が必要だからです。

私の問題は、このコードでは、テーブルswticketauditlogsの3つの条件のいずれかが尊重されない場合、チケットが選択されないことです。私が欲しいのは:

チケットが選択され、条件が尊重されていないフィールドは空白になります。

しかし、私はこれを行う方法を理解できません...

ご協力いただきありがとうございます。

4

4 に答える 4

1

LEFT JOIN暗黙的な結合を明示的なsに置き換える必要があります。

...
FROM swtickets tick
LEFT JOIN swticketauditlogs logs1
       ON (     logs1.ticketid = tick.ticketid
            AND logs1.actionmsg LIKE '%to: Pre-analysis%'
          )
LEFT JOIN swticketauditlogs logs2
       ON 
...

レコードが見つかった場合は値が返され、見つからなかった場合は選択した列が返されますNULL

于 2012-04-30T13:00:46.223 に答える
1

外部結合を使用したい(他のテーブルから一致しない行を削除しない):

SELECT
  tick.ticketid                 AS `Ticket`,
  tick.subject                  AS `Sujet`,
  FROM_UNIXTIME(tick.dateline)  AS `Reception`,
  FROM_UNIXTIME(logs1.dateline) AS `Verification`,
  FROM_UNIXTIME(logs2.dateline) AS `Debut trait.`,
  FROM_UNIXTIME(logs3.dateline) AS `Fin trait.`,
  tick.prioritytitle            AS `Priorite`,
  tick.tickettypetitle          AS `Genre`,
  tick.timeworked/60            AS `Temps de travail`,
  tick.fullname                 AS `Createur`
FROM
  swtickets AS tick
  LEFT JOIN swticketauditlogs AS logs1 ON (
         logs1.ticketid = tick.ticketid
    AND  logs1.actionmsg LIKE '%to: Pre-analysis%'
  )
  LEFT JOIN swticketauditlogs AS logs2 ON (
         logs2.ticketid = tick.ticketid
    AND (logs2.actionmsg LIKE '%to: Handled%'
     OR  logs2.actionmsg LIKE '%to: In Progress%')
  )
  LEFT JOIN swticketauditlogs AS logs3 ON (
         logs3.ticketid = tick.ticketid
    AND (logs3.actionmsg LIKE '%to: Pre-closed%'
     OR  logs3.actionmsg LIKE '%to: Closed%')
  )
GROUP BY tick.ticketid
于 2012-04-30T13:01:04.537 に答える
1

sを使用しますLEFT JOIN

select ...
from swtickets tick
left join swticketauditlogs logs1 on tick.ticketid = logs1.ticketid and logs1.actionmsg like '%to: Pre-analysis%'
left join swticketauditlogs logs2 on tick.ticketid = logs2.ticketid and (logs2.actionmsg like '%to: Handled%' or logs2.actionmsg like '%to: In Progress%')
left join swticketauditlogs logs3 on tick.ticketid = logs3.ticketid and (logs3.actionmsg like '%to: Pre-closed%' or logs3.actionmsg like '%to: Closed%')
group by tick.ticketid
于 2012-04-30T13:01:29.897 に答える
0

sを使用したいLEFT JOIN

select tick.ticketid 'Ticket', tick.subject 'Sujet', FROM_UNIXTIME(tick.dateline)     'Reception', FROM_UNIXTIME(logs1.dateline) 'Verification', FROM_UNIXTIME(logs2.dateline)     'Debut trait.',
FROM_UNIXTIME(logs3.dateline) 'Fin trait.', tick.prioritytitle 'Priorite',  tick.tickettypetitle 'Genre', tick.timeworked/60 'Temps de travail', tick.fullname  'Createur'
from
swtickets tick
    left join
swticketauditlogs logs1
    on
      tick.ticketid = logs1.ticketid and
      logs1.actionmsg like '%to: Pre-analysis%'
    left join
swticketauditlogs logs2
    on
      tick.ticketid = logs2.ticketid and
      (logs2.actionmsg like '%to: Handled%' or logs2.actionmsg like '%to: In Progress%')
    left join
swticketauditlogs logs3
    on
      tick.ticketid = logs3.ticketid and
      (logs3.actionmsg like '%to: Pre-closed%' or logs3.actionmsg like '%to: Closed%')
group by tick.ticketid

左結合は、結合が成功しない場合、右テーブルの列にnullを生成します。(これらヌルであり、「空白」ではないことに注意してください-それが意味するものは何でも)。

于 2012-04-30T13:00:45.207 に答える