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 倍,因为对于我的查询的每一行,我需要表的同一列的三倍,但具有其他条件。

我的问题是,使用此代码,如果不遵守表 swticketauditlogs 上的三个条件之一,则不会选择票证。我想要的是:

已选择工单,且未遵守条件的字段为空白。

但我不知道如何做到这一点......

谢谢你的帮助。

4

4 回答 4

1

You will have to replace you implicit joins by explicit LEFT JOINs:

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

If a record is found, the values are returned, otherwise your selected columns are NULL.

于 2012-04-30T13:00:46.223 回答
1

You want to use outer joins (which don't eliminate non-matching rows from other tables):

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

使用LEFT JOINs:

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

You want to use LEFT JOINs:

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

Left joins produce nulls in the columns from the right table, if the join doesn't succeed. (Note that these are nulls, not "blank" - whatever that may mean).

于 2012-04-30T13:00:45.207 回答