悪い/長いタイトルで申し訳ありませんが、他にそれを置く方法がわかりません。
私がやりたいのは、「A」テーブルに結合し、それを「B」テーブルに結合することです。ここで、両方の「A」は共通の外部キーを持ち、次のような重複を防ぎながら、同じ行に両方の「A」テーブルからの情報を表示します。写真の例:
クエリがその仕事をしていることは知っていますが、出力前に行を比較することで「重複」を防ぐ方法はありますか?
これが私が試したことです。パフォーマンス的には悪いかもしれませんし、もっと良い方法があるかもしれませんが、これはパフォーマンスがそれほど重要ではない小さなDBのミニプロジェクト用です。
SELECT w.emp_id AS emp1_id, w2.emp_id AS emp2_id,
e.fname || ' ' || e.lname AS emp1_name, e1.fname || ' ' || e1.lname AS emp2_name,
e.jobtitle AS emp1_jobtitle, e1.jobtitle AS emp2_jobtitle, e2.fname || ' ' || e2.lname AS cs_name
FROM work_on w
LEFT JOIN work_on w2
on w.emp_id != w2.emp_id and w.ticket_id = w2.ticket_id
LEFT JOIN employee e
on w.emp_id = e.emp_id
LEFT JOIN employee e1
on w2.emp_id = e1.emp_id
LEFT JOIN ticket t
on t.ticket_id = w.ticket_id
LEFT JOIN customer_problem p
on p.problem_id = t.problem_id
LEFT JOIN employee e2
on e2.emp_id = p.emp_id
WHERE e2.emp_id = 20 and p.submit_date >= '2018-04-08'
and p.submit_date <= '2018-04-11' and e1.emp_id != e.emp_id
ORDER BY w.emp_id;
私のテーブル:
Employee: | Work_On: | Ticket: | Problem
----------+------------+--------------+------------
emp_id work_id ticket_id problem_id
fname emp_id problem_id emp_id
lname ticket_id
この場合、私は2人の結合しようとしている従業員のWork_On彼らが持っているチケットを経由して、チケットに接続する共通の、別の従業員問題のテーブルを。
最小/最大を使用する1つのオプションは次のとおりです。
SELECT DISTINCT
LEAST(w.emp_id, w2.emp_id) AS emp1_id,
GREATEST(w.emp_id, w2.emp_id) AS emp2_id,
LEAST(e.fname || ' ' || e.lname, e1.fname || ' ' || e1.lname) AS emp1_name,
GREATEST(e.fname || ' ' || e.lname, e1.fname || ' ' || e1.lname) AS emp2_name,
LEAST(e.jobtitle, e1.jobtitle) AS emp1_jobtitle,
GREATEST(e.jobtitle, e1.jobtitle) AS emp2_jobtitle,
e2.fname || ' ' || e2.lname AS cs_name
FROM work_on w
LEFT JOIN work_on w2
ON w.emp_id != w2.emp_id AND w.ticket_id = w2.ticket_id
LEFT JOIN employee e
ON w.emp_id = e.emp_id
LEFT JOIN employee e1
ON w2.emp_id = e1.emp_id
LEFT JOIN ticket t
ON t.ticket_id = w.ticket_id
LEFT JOIN customer_problem p
ON p.problem_id = t.problem_id
LEFT JOIN employee e2
ON e2.emp_id = p.emp_id
WHERE
e2.emp_id = 20 AND
p.submit_date >= '2018-04-08' AND
p.submit_date <= '2018-04-11' AND
e1.emp_id != e.emp_id
ORDER BY w.emp_id;
最小/最大のトリックが機能する理由を確認するには、次の2つのレコード/列を検討してください。
emp1_id | emp2_id
2 | 15
15 | 2
これらのレコードは現在は区別されていますが、代わりに最小のIDを選択し、次に最大のIDを選択すると、同じように見えることは明らかです。
LEAST(emp_id1, emp_id2) | GREATEST(emp_id1, emp_id2)
2 | 15
2 | 15
次に、を使用SELECT DISTINCT
すると、2つの重複する行の1つが削除されます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加