Bob
Bob

Reputation: 93

MySql - concat in query with left outer join

I don't get it. I've tried:

SELECT
table1.name, CONCAT( country,  '.', id ) AS table1.code,
table2.name
FROM tabel1
LEFT OUTER JOIN
table2 ON ( table1.code = table2.code )

I need to combine country and id to country.id because table2.code has this schema.

Thanks in advance.

Upvotes: 8

Views: 35296

Answers (2)

SiliconMind
SiliconMind

Reputation: 2179

For anyone pulling his hair out because of the poor performance of ON CONCAT() joins: make sure you cast your non string values to CHAR it improves the performance astronomically:

SELECT t1.name t1_name,
       t2.name t2_name
FROM table1 t1 LEFT JOIN
     table2 t2 ON CONCAT(t1.country,  '.', CAST(t1.id AS CHAR) ) = t2.code

Explanation hides in MySQL docs for CONCAT() function:

…If all arguments are non-binary strings, the result is a non-binary string. If the arguments include any binary strings, the result is a binary string. A numeric argument is converted to its equivalent binary string form; if you want to avoid that, you can use an explicit type cast

Credit for this goes to Aurimas Mikalauskas.

Upvotes: 7

peterm
peterm

Reputation: 92785

If I understand you correct you might need something like this

SELECT t1.name t1_name,
       t2.name t2_name
FROM table1 t1 LEFT JOIN
     table2 t2 ON CONCAT(t1.country,  '.', t1.id ) = t2.code

SQLFiddle example

Upvotes: 13

Related Questions