반응형
customer_id, 이메일 및 참조를 저장하는 테이블 customer가 있습니다. 고객에 대한 변경 내역 기록을 저장하는 추가 테이블 customer_data가 있습니다. 즉, 변경 사항이있을 때 새 행이 삽입됩니다.
테이블에 고객 정보를 표시하려면 두 테이블을 조인해야하지만 고객 데이터의 가장 최근 행만 고객 테이블에 조인되어야합니다.
쿼리에 페이지가 매겨져 있으므로 제한과 오프셋이 있다는 점에서 조금 더 복잡해집니다.
MySQL로 어떻게 할 수 있습니까? 어딘가에 DISTINCT를 넣고 싶은 것 같아요 ...
순간의 쿼리는 다음과 같습니다.
SELECT *, CONCAT(title,' ',forename,' ',surname) AS name
FROM customer c
INNER JOIN customer_data d on c.customer_id=d.customer_id
WHERE name LIKE '%Smith%' LIMIT 10, 20
또한 LIKE와 함께 CONCAT을 이런 식으로 사용할 수 있다고 생각하는 것이 맞습니까?
(INNER JOIN이 사용하기에 잘못된 유형의 JOIN 일 수 있다는 점에 감사드립니다. 실제로 서로 다른 JOIN의 차이점이 무엇인지 전혀 알 수 없습니다. 지금 살펴 보겠습니다!)
해결 방법
다음을 시도해 볼 수 있습니다.
SELECT CONCAT(title, ' ', forename, ' ', surname) AS name
FROM customer c
JOIN (
SELECT MAX(id) max_id, customer_id
FROM customer_data
GROUP BY customer_id
) c_max ON (c_max.customer_id = c.customer_id)
JOIN customer_data cd ON (cd.id = c_max.max_id)
WHERE CONCAT(title, ' ', forename, ' ', surname) LIKE '%Smith%'
LIMIT 10, 20;
JOIN
은 INNER JOIN
의 동의어 일뿐입니다.
테스트 케이스 :
CREATE TABLE customer (customer_id int);
CREATE TABLE customer_data (
id int,
customer_id int,
title varchar(10),
forename varchar(10),
surname varchar(10)
);
INSERT INTO customer VALUES (1);
INSERT INTO customer VALUES (2);
INSERT INTO customer VALUES (3);
INSERT INTO customer_data VALUES (1, 1, 'Mr', 'Bobby', 'Smith');
INSERT INTO customer_data VALUES (2, 1, 'Mr', 'Bob', 'Smith');
INSERT INTO customer_data VALUES (3, 2, 'Mr', 'Jane', 'Green');
INSERT INTO customer_data VALUES (4, 2, 'Miss', 'Jane', 'Green');
INSERT INTO customer_data VALUES (5, 3, 'Dr', 'Jack', 'Black');
결과 ( LIMIT
및 WHERE
가없는 쿼리) :
SELECT CONCAT(title, ' ', forename, ' ', surname) AS name
FROM customer c
JOIN (
SELECT MAX(id) max_id, customer_id
FROM customer_data
GROUP BY customer_id
) c_max ON (c_max.customer_id = c.customer_id)
JOIN customer_data cd ON (cd.id = c_max.max_id);
+-----------------+
| name |
+-----------------+
| Mr Bob Smith |
| Miss Jane Green |
| Dr Jack Black |
+-----------------+
3 rows in set (0.00 sec)
참조 페이지 https://stackoverflow.com/questions/3619030
반응형
'MySql' 카테고리의 다른 글
MySQL Auto TimeStamp new entry to DB (phpMyAdmin) (0) | 2020.11.09 |
---|---|
MySQL How do I set MySQL as the default database in Rails 3? (0) | 2020.11.09 |
MySQL PHP 정렬이 mysql "order by"보다 낫습니까? (0) | 2020.11.09 |
MySQL 두 날짜의 차이를 시간으로 반올림하는 방법 (0) | 2020.11.09 |
MySQL Excel 파일을 mysql 데이터베이스로 변환하는 방법은 무엇입니까? (0) | 2020.11.08 |
댓글