2013-08-27 10 views
1

Я пытаюсь получить информацию из базы данных mysql. У меня есть следующие таблицы:MYSQL SELECT FROM MULTIPLE COLUMS FROM TABLES

Квалификация (qualificationid, qualificationname, PersonID, статус)

Адрес (AddressID, addressLine1, город, область, код города, PersonID)

оценка (scoreid, оценка .choices, PersonID, JobID)

Я использую напечатал следующий MySQL заявление для извлечения данных

SELECT score.personid, qualifications.qualificationname, score.score 
FROM 
Qualifications, Score, Address 
WHERE 
score.jobid=58 
AND 
qualifications.qualificationName ='Human Resource Management' 
AND 
aadress.province ='Western Cape' 
ORDER BY score.score 
LIMIT 0,20; 

Это, похоже, работает на все остальное, но не ограничивает провинцию западным мысом.

Пожалуйста, помогите, куда я иду не так?

+0

провинция - это «западный мыс» именно так? любой шанс иметь пространство или другие символы? вы можете попробовать: ВЕРХНИЙ (RTRIM (LTRIM (aadress.province))) = ВЕРХНИЙ (RTRIM (LTRIM («Западный Кейп»))); ИЛИ aadress.province LIKE '% Western Cape%'. Надеюсь, это поможет –

+0

Мне нравится опечатка: address.province вместо aadress.province – aross

ответ

2

Почему вы не используете соединения? Например:

SELECT s.personid, q.qualificationname, s.score 
    FROM Score s 
    INNER JOIN Qualifications q ON q.personid = s.personid AND q.qualificationName ='Human Resource Management' 
    INNER JOIN Address a ON a.personid = s.personid AND a.province ='Western Cape' 
    WHERE s.jobid = 58 
    ORDER BY s.score DESC 
    LIMIT 0,20; 
0

Необходимо определить отношения. Система теперь не имеет понятия, как Адреса связаны с оценками или квалификациями в вашем примере. Добавив GROUP BY score.personid и AND score.personid = address.personid и score.personid = qualifications.personid, вы можете исправить свои проблемы.

Кроме того, использование JOINS, вероятно, более эффективно, так как оно в основном то же самое.