[Diesel.rs] join
๋์ ค์ ๋น์ฐํ join์ ๋ํ ๊ตฌ๋ฌธ๋ ์ ๊ณตํ๋ค.
์ผ๋จ ๋ค์๊ณผ ๊ฐ์ ํ ์ด๋ธ์ด ์๋ค๊ณ ์น๊ฒ ๋ค.
๋ค๋ฅธ๊ฑด ์ ์ธํด๋ ๋๊ณ , writer_id๋ ๋ค๋ฅธ ํ
์ด๋ธ tb_user์ id๋ฅผ ๊ฐ๋ฆฌํค๋ ์๋ณ์๋ค.

๋ด๋ถ ์กฐ์ธ(inner join)
์ฌ๊ธฐ์ ์ง๊ธ ๋๋ tb_document_history์ ์ ์ฅ๋ ํ์คํ ๋ฆฌ๋ชฉ๋ก์ ์ ๋ถ ์กฐํํด์ค๋, ๊ทธ ํ์คํ ๋ฆฌ๋ฅผ ์์ฑํ ์ฌ์ฉ์์ ์ด๋ฆ ๋ฑ์ ํจ๊ป ๊ฐ์ ธ์ค๊ณ ์ ํ๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด join ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ์ ์๋ค.
์กฐ๊ธ ๋ณต์กํ ์ ์๋ค.
ํํฐ๋ง์ ๊ฑธ๊ธฐ ์ ์ ๋จผ์ inner_join, left_join ๋ฑ์ผ๋ก ์กฐ์ธํ ํ
์ด๋ธ์ ๊ฑธ์ด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ํ
์ด๋ธ ๊ฐ์๋ table.on์ผ๋ก ์กฐ์ธํ ์กฐ๊ฑด์ ๋ฌ์์ค๋ค. ์ธ๋ํค ๋ฑ์ผ๋ก ์๋ ์ฐธ์กฐ๊ฐ ๋๋ ๊ฒฝ์ฐ์๋ ๊ทธ๋ฅ ํ
์ด๋ธ๋ง ๋ฃ์ด๋ ๋๋๋ผ.
๊ทธ๋ฆฌ๊ณ ๋์๋ ์ฌํ ํด์๋ฏ์ด ๋ดํค๋๋๋ก ํํฐ, select ๋ฑ์ ๊ฑธ์ด์ฃผ๋ฉด ๋๋ค.
DocumentHistory๋ join ์์ ์ ์ฉ์ผ๋ก ์ฌ์ฉํ๋๋ก ๋ง๋ ๊ฐ ํ์
์ด๋ค.

๊ทธ๋ผ ๋ค์๊ณผ ๊ฐ์ด ์ฟผ๋ฆฌ๋ฅผ ์ ๋ฝ์์ค ๊ฒ์ด๋ค.

๋ฐ์ดํฐ๋ ์์๊ฒ ์ ๋ฝํ๋ค.
์ธ๋ถ ์กฐ์ธ(left outer join)
๋์ผํ ๊ตฌ์กฐ๋ก left_join๋ ์ ๊ณต๋๋๋ฐ, ์ ๋ฐ์ ์ธ ์ฌ์ฉ๋ฒ์ ๋์ผํ๋ค.
๊ธฐ์ค์ด ์๋ ํ
์ด๋ธ์ ์ปฌ๋ผ์ ๊ฒฝ์ฐ์๋ null์ผ ์๊ฐ ์์ผ๋ nullable ํ์๋ฅผ ๋ฃ์ด์ฃผ๊ณ Option์ผ๋ก ๊ฐ์ธ์ค์ผ ํ๋ค๋ ์ ๋ง ๋ค๋ฅด๋ค.

right_join์ ๊ตฌํ์์ ํ๊ณ๋ก ์กด์ฌํ์ง ์๋ ๊ฒ ๊ฐ๋ค.
์ฐธ์กฐ
https://github.com/trombonehero/diesel-join-example
https://github.com/diesel-rs/diesel/issues/2001