Ms-sql where (in) 질문

μ•ˆλ…•ν•˜μ„Έμš”. :smile:

MS-SQLμ—μ„œ WHERE IN? μ‚¬μš© μ‹œ κΆκΈˆν•œ 점이 μžˆμ–΄ μ§ˆλ¬Έλ“œλ¦½λ‹ˆλ‹€.

SELECT CODE
     , NAME
  FROM USERS
 WHERE CODE IN (1, 2, 6, 7)

μœ„μ™€ 같은 μΏΌλ¦¬μ—μ„œ μ œκ°€ ν•˜κ³  μ‹Άμ€κ²Œ μžˆλŠ”λ°μš”.

int[] codes = { 1, 2, 6, 7 };

SELECT CODE
     , NAME
  FROM USERS
 WHERE CODE IN (codes)

이런 λ°©μ‹μœΌλ‘œ 상단에 λ°°μ—΄ λ³€μˆ˜μ²˜λŸΌ μ„ μ–Έν•˜μ—¬ μ‚¬μš©ν•  수 μžˆμ„κΉŒμš”?
(μΏΌλ¦¬μ—μ„œ ν•΄κ²°)

μ½μ–΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€!

μ’‹μ•„μš” 1

이럴 λ•Œ ν”νžˆ μ‚¬μš©ν•΄λ΄„μ§ν•œκ²Œ Join Queryλ‚˜ Sub Query, ν˜Ήμ€ Temp Table 같은 것이 μžˆμ„ 것 κ°™μŠ΅λ‹ˆλ‹€. λ…Όλ¦¬μ μœΌλ‘œ μ—°κ΄€ 관계가 λͺ…ν™•ν•˜λ‹€λ©΄ Join Query와 Indexλ₯Ό 잘 μ‚¬μš©ν•˜λŠ” 것이 λ°μ΄ν„°λ² μ΄μŠ€μ— 뢀담을 λΌμΉ˜μ§€ μ•ŠλŠ” κ°€μž₯ λ°”λžŒμ§ν•œ 방법이 될 것 κ°™μŠ΅λ‹ˆλ‹€. (λ°μ΄ν„°λ² μ΄μŠ€κ°€ 슀슀둜 μ²˜λ¦¬ν•΄μ•Ό ν•˜λŠ” μ—°μƒμ˜ 양도 뢀담이고, λ‘œμ»¬μ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€λ‘œ λ³΄λ‚΄λŠ” 쿼리의 νšŸμˆ˜κ°€ λ§Žμ€ 것도 뢀담이 λ˜λŠ” 것을 λͺ¨λ‘ κ°μ•ˆν•΄μ•Ό ν•©λ‹ˆλ‹€.)

μ’‹μ•„μš” 3

@rkttu μ•„ν•˜ μžμ„Έν•œ μ„€λͺ… κ°μ‚¬ν•©λ‹ˆλ‹€. :smile:
쿼리 상황이 IN을 톡해 νŠΉμ • λ³€μˆ˜λ“€μ„ μž…λ ₯ν•΄μ•Όν•˜λŠ”λ°,
쿼리 전체가 μ’€ κΈΈμ–΄μ„œ 상단에 int[] codes; λ³€μˆ˜μ²˜λŸΌ μ„ μ–Έν•΄μ£Όκ³  μ‚¬μš©ν•  수 μžˆμ„κΉŒ ν•΄μ„œμš”!!

Temp Table을 μ‚¬μš©ν•œλ‹€λ©΄ 더 λ²ˆκ±°λ‘œμ›Œμ§ˆκΉŒμš”?

mssql 의 stored procedure μ—μ„œ 내뢀에 배열을 μ„ μ–Έν•˜κ³  μ‹ΆμœΌμ‹œλ‹€λŠ”κ±΄κ°€μš”?
μ•„λ‹ˆλ©΄ c# μ—μ„œ 배열을 쿼리에 λ„£κ³  sqlcommand 둜 돌리고 μ‹ΆμœΌμ‹œλ‹€λŠ”κ±΄κ°€μš”?

μ’‹μ•„μš” 1

@bluepope λ„€ λ§žμŠ΅λ‹ˆλ‹€. C#이 μ•„λ‹Œ 쿼리μͺ½μ—μ„œ μ‚¬μš©ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. μ„€λͺ…이 μ’€ λΆ€μ‘±ν–ˆλ„€μš”.

sp μ—μ„œ μ‚¬μš©ν•˜μ‹ λ‹€λ©΄ #temp ν…Œμ΄λΈ”μ„ μ„ μ–Έν•˜μ—¬ insert ν›„ join ν•˜κ±°λ‚˜ in 으둜 μ‚¬μš©ν•˜μ‹œλ©΄ 될 것 κ°™μŠ΅λ‹ˆλ‹€

μ’‹μ•„μš” 1

λ‹€λ“€ μ‘°μ–Έ ν•΄μ£Όμ‹ λŒ€λ‘œ ν•΄λ΄€μŠ΅λ‹ˆλ‹€.

그리고 ν˜Ήμ‹œ λ‚˜ μ €μ²˜λŸΌ ν•„μš”ν•˜μ‹  뢄을 μœ„ν•΄ 쿼리도 λ‚¨κ²¨λ†“μŠ΅λ‹ˆλ‹€!

DECLARE @codes table (code int);
 INSERT @codes(code) values(1), (2), (6), (7);    

SELECT CODE
  FROM USERS
 WHERE CODE IN (SELECT CODE FROM @codes)

κ°μ‚¬ν•©λ‹ˆλ‹€. :smile:

μ’‹μ•„μš” 2