2017-02-15 5 views
0

に一致する行を複製する、私は上記のクエリのために次のような結果を得るため、私は以下のクエリを持っているSQL</p> <p>に新たなんだクエリ

select v.pattern_id,v.id,v.pdb_id as viocardId,p.pdb_id as PID,s.vio_id as SiVioId, r.date as orcdate, s.created_date as sivcreateddate 
from orc_orcviolation v, orc_orcpattern p, siverify_siverifyverificationsite s, orc_orccheck o, orc_orcrecord r 
where v.pattern_id = p.id 
and p.pdb_id = s.pattern_id 
and p.if_target = s.if_target 
and p.if_secure <> 1 
and v.check_id = o.id 
and o.record_id = r.id 

をnull値を割り当て

pattern_id id viocardId PID SiVioId orcdate sivcreateddate 
469064 1205777 3024788 2335310 1739560 2014-05-02 16:14:32 2015-06-21 13:18:49 
469064 1241653 3097963 2335310 1739560 2014-05-24 17:07:55 2015-06-21 13:18:49 
469064 1309143 3393980 2335310 1739560 2014-07-19 17:49:11 2015-06-21 13:18:49 
469064 1514825 4079963 2335310 1739560 2014-10-29 14:07:58 2015-06-21 13:18:49 
469064 1516474 4085403 2335310 1739560 2014-10-30 20:52:10 2015-06-21 13:18:49 
469064 1613816 4692514 2335310 1739560 2015-01-10 12:29:30 2015-06-21 13:18:49 
469064 1631484 4728047 2335310 1739560 2015-01-23 19:49:30 2015-06-21 13:18:49 
469064 1700479 5413265 2335310 1739560 2015-04-16 15:01:08 2015-06-21 13:18:49 
469064 1702863 5416425 2335310 1739560 2015-04-22 00:07:01 2015-06-21 13:18:49 
**469064 1739560 5540728 2335310 1739560 2015-06-17 05:12:05 2015-06-21 13:18:49** 
469064 1911207 5818507 2335310 1739560 2015-12-04 07:53:33 2015-06-21 13:18:49 
469064 1940132 5828037 2335310 1739560 2015-12-19 03:24:25 2015-06-21 13:18:49 

**マークされた行では、v.idとs.vio_idの値が一致しています。一致する行とは別の方法で、クエリがsivioId列の他の行に対してnullを返しますか?

答えて

1

お探しの商品はCASEです。

結果行の値に応じて、返す値を選択できます。この場合、s.vio_id!=v.idのときにnullを返します。

SELECT v.pattern_id, v.id, v.pdb_id AS viocardId, p.pdb_id AS PID, 
    CASE WHEN s.vio_id=v.id THEN s.vio_id ELSE null END AS SiVioId, 
    r.date AS orcdate, s.created_date AS sivcreateddate 

FROM orc_orcviolation AS v 
LEFT JOIN orc_orcpattern AS p ON v.pattern_id = p.id 
LEFT JOIN siverify_siverifyverificationsite s 
    ON p.pdb_id = s.pattern_id and p.if_target = s.if_target 
LEFT JOIN orc_orccheck AS o ON v.check_id = o.id 
LEFT JOIN orc_orcrecord AS r ON o.record_id = r.id 
WHERE p.if_secure <> 1 

あなたの質問への答えは、私のクエリのSELECT句から来ています。
JOINsを使用してクエリを書き直しました。テーブル間の接続がわかりやすいからです。結合を使用したくない場合は、回答の一部のみSELECTを使用してください。

このクエリは生じるはずである:

pattern_id id  viocardId PID  SiVioId orcdate    sivcreateddate 
469064  1205777 3024788 2335310 null 2014-05-02 16:14:32 2015-06-21 13:18:49 
469064  1241653 3097963 2335310 null 2014-05-24 17:07:55 2015-06-21 13:18:49 
469064  1309143 3393980 2335310 null 2014-07-19 17:49:11 2015-06-21 13:18:49 
469064  1514825 4079963 2335310 null 2014-10-29 14:07:58 2015-06-21 13:18:49 
469064  1516474 4085403 2335310 null 2014-10-30 20:52:10 2015-06-21 13:18:49 
469064  1613816 4692514 2335310 null 2015-01-10 12:29:30 2015-06-21 13:18:49 
469064  1631484 4728047 2335310 null 2015-01-23 19:49:30 2015-06-21 13:18:49 
469064  1700479 5413265 2335310 null 2015-04-16 15:01:08 2015-06-21 13:18:49 
469064  1702863 5416425 2335310 null 2015-04-22 00:07:01 2015-06-21 13:18:49 
469064  1739560 5540728 2335310 1739560 2015-06-17 05:12:05 2015-06-21 13:18:49 
469064  1911207 5818507 2335310 null 2015-12-04 07:53:33 2015-06-21 13:18:49 
469064  1940132 5828037 2335310 null 2015-12-19 03:24:25 2015-06-21 13:18:49 
関連する問題