source

여러 테이블에서 *를 선택합니다.MySQL

goodcode 2022. 9. 18. 21:32
반응형

여러 테이블에서 *를 선택합니다.MySQL

SELECT name, price, photo FROM drinks, drinks_photos WHERE drinks.id = drinks_id

5행(5어레이),photo는 일련의 유일한 고유 필드입니다. name, price반복되다 fanta- name, price 를 3회 반복합니다).이 복제품들은 어떻게 없애죠?

편집: 갖고 싶다name, price그리고 모든 것photo음료수마다.

 id      name      price
  1.    fanta        5
  2.     dew         4


 id      photo                   drinks_id
  1.     ./images/fanta-1.jpg      1
  2.     ./images/fanta-2.jpg      1  
  3.     ./images/fanta-3.jpg      1 
  4.     ./images/dew-1.jpg        2
  5.     ./images/dew-2.jpg        2

여기서 수행하는 작업은 (여러 테이블에서 선택하기 때문에 암묵적으로 수행하는 작업이지만)라고 불립니다.즉, WHERE 절에 조건을 추가하지 않은 경우 이러한 표의 모든 조합을 사용할 수 있습니다.가입은 조건이 있는 경우에만 드링크 ID가 일치하는 행으로 제한됩니다.

그러나 이 특정 drinks_id가 포함된 X개의 사진이 있는 경우 모든 음료에 대해 X개의 다중 행이 여전히 결과에 있습니다.설명서에 따라 원하는 사진이 제한되지 않습니다!

음료당 행이 1개뿐인 경우 특정 drinks_id를 가진 행이 여러 개 있는 경우 SQL에 수행할 작업을 지정해야 합니다.이를 위해서는 그룹화와 집계 기능이 필요합니다.그룹화할 엔트리(예를 들어 모든 동등한 drinks_ids)를 SQL에 지시합니다.SELECT에서는 그룹화된 각 결과 행에 대해 어떤 엔트리를 사용해야 하는지 지시해야 합니다.숫자의 경우, 이것은 평균, 최소, 최대(일부 예로 들 수 있습니다.

당신의 경우, 한 줄만 원하는 경우 음료수 사진을 조회할 수 없습니다.각 음료의 결과에는 여러 장의 사진이 포함될 수 있다고 생각하겠지만 SQL에서는 이 작업을 수행할 수 없습니다.원하는 사진만 있고 어떤 사진이든 상관 없는 경우 drinks_id로 그룹화하면 됩니다(드링크당 한 줄만 얻을 수 있습니다).

SELECT name, price, photo
FROM drinks, drinks_photos
WHERE drinks.id = drinks_id 
GROUP BY drinks_id

name     price   photo
fanta    5       ./images/fanta-1.jpg
dew      4       ./images/dew-1.jpg

MySQL에는 GROUP_CONCAT도 있습니다.파일명을1개의 문자열로 연결하려면 , 다음의 순서를 실행합니다.

SELECT name, price, GROUP_CONCAT(photo, ',')
FROM drinks, drinks_photos
WHERE drinks.id = drinks_id 
GROUP BY drinks_id

name     price   photo
fanta    5       ./images/fanta-1.jpg,./images/fanta-2.jpg,./images/fanta-3.jpg
dew      4       ./images/dew-1.jpg,./images/dew-2.jpg

하지만, 만약 당신이 그것을 가지고 있다면, 이것은 위험해질 수 있습니다.,클라이언트측에서 이 값을 다시 분할할 가능성이 높기 때문에 필드 값 내에 있습니다.또한 표준 SQL Aggregate 함수도 아닙니다.

이름과 가격에 대한 중복된 값이 여기에 있습니다.drinks_photos 테이블에는 ID가 중복되어 있습니다.당신은 그들을 피할 방법이 없어요.또한 정확히 무엇을 원하는가?

중복을 제거하기 위해 다음을 기준으로 그룹화할 수 있습니다.drinks.id 하면 한 한 안 drinks.id(데이터베이스의 사내 실장에 의해서, 취득하는 사진이 다릅니다).

있지 않지만 MySQL의 가장 낮은 MySQL의 수 id(이렇게 하다)

SELECT name, price, photo 
FROM drinks, drinks_photos 
WHERE drinks.id = drinks_id
GROUP BY drinks.id

언급URL : https://stackoverflow.com/questions/12890071/select-from-multiple-tables-mysql

반응형