简体   繁体   中英

MySQL JOIN on using substring from one table

I'm trying to join two tables together in MySQL. I need to join based on the full string from one field (Table a:ID) and the sub-string from the other table (Table b:caseID). A mock-up of the table structure can be seen at the bottom of this post. ID and caseID are defined as unique.

The output I'm looking for is similar to:

|-------------|--------------|------------|
|      ID     |     name     |     age    |
|-------------|--------------|------------|
|      1      |     Bob      |     22     |
|      2      |     Bill     |     23     |
|      3      |     Ben      |     24     |
|-------------|--------------|------------|

I know how to extract a substring based on a delimiter:

SELECT SUBSTRING(caseID, LOCATE('-', caseID)+1, LENGTH(caseID)) AS ExtractString FROM b

but I'm unclear how to combine this with the usual SQL JOIN statement to return all joined records. I keep getting error like 'returns more than one row'.

Any help much appreciated.

Table a:

|-------------|--------------|
|      ID     |     name     |
|-------------|--------------|
|      1      |     Bob      |
|      2      |     Bill     |
|      3      |     Ben      |
|-------------|--------------|

Table b:

|-------------|--------------|
|   caseID    |     age      |
|-------------|--------------|
|    24-1     |     22       |
|    24-2     |     23       |
|    24-3     |     24       |
|-------------|--------------|

SELECT * FROM a LEFT JOIN b ON a.ID = SUBSTRING(b.caseID, LOCATE('-', b.caseID)+1, LENGTH(b.caseID))

SELECT * 
FROM a 
JOIN b ON a.ID = SUBSTRING_INDEX(b.caseID, '-', -1)

Typical, as soon as I ask the question I work out the answer!

SELECT a.*, b.*
FROM a
JOIN b
ON b.id = SUBSTRING(a.caseID, LOCATE('-', a.caseID)+1, LENGTH(a.caseID))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM