SELECT * FROM 여러 테이블. MySQL
SELECT name, price, photo FROM drinks, drinks_photos WHERE drinks.id = drinks_id
yeilds 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
여기서 수행하는 작업을 a라고합니다 JOIN
(여러 테이블에서 선택하기 때문에 암시 적으로 수행하지만). 즉, WHERE 절에 조건을 입력하지 않으면 해당 테이블의 모든 조합 이있는 것입니다. 조건이있는 경우에만 음료 ID가 일치하는 행으로 조인을 제한합니다.
그러나이 특정 drinks_id가있는 사진이 X 개인 경우 모든 음료에 대한 결과에는 여전히 X 개의 여러 행이 있습니다. 귀하의 성명은 제한하지 않습니다 어떤 당신이 원하는 사진 (들)!
음료 당 하나의 행만 원하는 경우 특정 drink_id가있는 여러 행이있는 경우 수행 할 작업을 SQL에 알려야합니다. 이를 위해서는 그룹화 및 집계 함수 가 필요 합니다 . 함께 그룹화 할 항목 (예 : 모두 동일한 drink_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 도 있습니다 .
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 집계 함수가 아닙니다.
여기에 이름과 가격에 대한 중복 값이 있습니다. 그리고 drink_photos 테이블에 id가 중복되어 있습니다. 피할 수있는 방법이 없습니다.
중복을 제거하려면으로 그룹화 할 수 있습니다 drinks.id
. 그러나 그렇게하면 각각에 대해 하나의 사진 만 얻을 수 있습니다 drinks.id
(어떤 사진을 얻을지는 데이터베이스 내부 구현에 따라 다름).
문서화되어 있지는 않지만 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
'Program Tip' 카테고리의 다른 글
zeromq : 무한 대기를 방지하는 방법? (0) | 2020.11.21 |
---|---|
setup.py에서 라이브러리 버전을 어떻게 지정할 수 있습니까? (0) | 2020.11.21 |
Python 방식으로 csv 파일에 헤더 추가 (0) | 2020.11.21 |
화폐 / 통화에 대한 HTML5 입력 (0) | 2020.11.21 |
세로 스크롤바를 강제로 표시하려면 어떻게합니까? (0) | 2020.11.21 |