[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