2013-02-26 2 views
2

Я пытаюсь запустить скрипт ниже, но всегда получаю значения NULL для поля имени.SQL left/right JOIN issue

SELECT u.name AS _user_name, s.name AS _school_name 
FROM fwg_files AS f 
LEFT JOIN users AS u ON u.id = f.user_id 
LEFT JOIN user_profiles AS up ON up.user_id = u.id 
LEFT JOIN school AS s ON s.id = up.profile_value 

Проблема мне кажется в JOIN ON школе стол, я попытался ВЫБРАТЬ s.id и он возвращает NULL значения также. Когда я изменяю последнюю строку RIGHT JOIN он начинает работать, но я могу видеть только значение s.name, остальные NULL

Таблица fwg_files

id | user_id 
240 | 414 
241 | 436 

пользователей Таблица

id | name 
414 | Name 1 
436 | Name 2 

Таблица user_profiles

user_id | profile_value 
414  | "6" 
436  | "14" 

Таблица школы

id | name 

6 | School 1 
14 | School 2 

Спасибо

+0

Sac: нет, у меня нет, есть ли у вас какие-либо предложения, как это сделать? – xtomeek

+0

Значения вашего профиля должны быть внешним ключом с целочисленным типом, а не с varchar –

+0

Я попытался изменить последнюю строку на LEFT JOIN fad9u_school AS s ON s.id = CAST (up.profile_value AS UNSIGNED), но только тот же результат – xtomeek

ответ

2

Если котировки на profile_value колонке является обязательным, то необходимо использовать смесь CONVERT и SUBSTRING_INDEX, чтобы избавиться от котировок для того, чтобы быть в состоянии сделать операцию.

Проверьте следующий код:

SELECT users.name as User, s.name as School 
    FROM fwg_files AS ff 
    LEFT JOIN users ON users.id = ff.user_id 
    LEFT JOIN user_profiles AS up ON up.user_id = users.id 
    LEFT JOIN school AS s ON s.id = CONVERT(SUBSTRING_INDEX(up.profile_value,'"',-2),UNSIGNED INTEGER); 

А вот working SQL Fiddle code с предложениями.

+1

Большое спасибо! Он отлично работает :-) – xtomeek