Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JOIN only if column is NULL

I've two tables as follow:

tag table (only tags in english):

ID    title
-------------
1     tag_1
2     tag_2
3     tag_3

tag_translation table:

ID    title      locale   tag_id (foreign key)
-----------------------------------------------
1     tag_1_fr   FR        1
2     tag_1_de   DE        1
3     tag_2_es   ES        3

How to do a SQL query returning all tags in french, and if no tag found in french, fallback to english?

Example of result (select all tags in french, fallback to english):

ID    title
---------------
1     tag_1_fr
2     tag_2
3     tag_3
like image 928
Jordan Aslam Avatar asked Dec 12 '25 22:12

Jordan Aslam


1 Answers

SELECT T.ID
       ,COALESCE(TT.TITLE, T.TITLE) AS TITLE
FROM tag T
LEFT JOIN tag_translation TT
    ON T.ID = TT.tag_id
    AND TT.locale = 'FR';

This assumes that tag_id and locale are unique in tag_translation.

like image 92
Cade Roux Avatar answered Dec 15 '25 15:12

Cade Roux



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!