2012-04-30 5 views
0

を尊敬されていない場合、私は私にいくつかの情報を返すために、このクエリを使用します。SQL - 表示何も条件が

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 

私のクエリの各行のために、私は3を必要とする、ので、私は3回swticketauditlogsテーブルを選択テーブルの同じ列に他の条件を乗じて計算します。

このコードでは、swticketauditlogsテーブルの3つの条件の1つが尊重されないと、チケットが選択されません。私が欲しいのは:

チケットが選択されており、未返答条件のフィールドは空白です。

しかし、私はこれを行う方法を見つけ出すことはできません...あなたの助けを

感謝。あなたはLEFT JOINの使いたい

答えて

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 
    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値を生成合流します。 (これらはで、空白ではありません - それは何でも意味します)。あなたが暗黙のあなたを交換する必要があります

+0

私は左がなく、加入の周りに、それは思いました私はそれを使用するのが難しいです。どうもありがとう! – HerrM

1

は、明示的な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 
... 

、値がそれ以外の場合は、あなたの選択した列がNULLあり、返されます。

+0

私はそれが左のジョイントの周りだと思ったが、私はそれを使用するのが難しかった。どうもありがとう! – HerrM

1

あなたは(他のテーブルから非一致する行がなくなるわけではありません)outer joinsを使用したい:

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 
+0

私はそれが左のジョイントの周りだと思ったが、私はそれを使用するのが難しかった。どうもありがとう! – HerrM

1

使用LEFT JOIN S:

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 
+0

私はそれが左のジョイントの周りだと思ったが、私はそれを使用するのが難しかった。どうもありがとう! – HerrM