sql >> Database teknologi >  >> RDS >> Mysql

MySQL JOIN kun den seneste række?

Du kan prøve følgende:

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;

Bemærk, at en JOIN er blot et synonym for INNER JOIN .

Testtilfælde:

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');
 

Resultat (forespørgsel uden LIMIT og 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)

  1. Hvad er MariaDB TX? Sådan administreres den nye MariaDB MySQL Fork!

  2. Automatiseret test af opgraderingsprocessen til PostgreSQL

  3. Hvordan får man adgang til array internt indeks med postgreSQL?

  4. MySQL Tilføj unik begrænsning