2015-02-20 2 views
0

Вот моя база данных, предназначенная для хранения данных о музыкантах. Мои навыки разработки баз данных не самые большие, но, надеюсь, все в порядке.Запрос нескольких таблиц в SQL с помощью объединений

ERM

Теги = жанры, например рок.

Skills = гитара или вокалиста

User_tags и user_skills просто используется для связывания таблиц вместе, так как пользователь может иметь много навыков и много тегов.

Что я пытаюсь сделать, так это запросить базу данных, чтобы я мог найти пользователей, обладающих определенными навыками и интересующихся определенными жанрами. Например, найдите всех пользователей, которые интересуются скалой и могут играть на гитаре. Я посмотрел присоединяется и сумел придумать следующий запрос:

SELECT users.username, skills.skill_name 
FROM user_skills 
    JOIN users 
     ON users.user_ID = user_skills.user_ID 
    JOIN skills 
     ON skills.skill_ID = user_skills.skill_ID 
WHERE skills.skill_name = 'Guitar'; 

Это работал, и я был в состоянии найти всех пользователей, которые играли на гитаре, но я не могу понять, как включить другую половину базы данных, а также (теги). Я попытался это:

SELECT users.username, skills.skill_name, tags.tag_name 
FROM user_skills, user_tags 
    JOIN users 
     ON users.user_ID = user_skills.user_ID 
    JOIN skills 
     ON skills.skill_ID = user_skills.skill_ID 
    JOIN tags 
     ON tags.tag_ID = user_tags.tag_ID 
WHERE skills.skill_name = 'Guitar' AND tags.tag_name = 'Rock'; 

Но я получил ошибку: #1054 - Unknown column 'user_skills.user_ID' in 'on clause'

колонна, безусловно, есть, хотя, так что единственное, что я могу думать о том, что разбивает это вы не можете присоединиться, когда вы выбираете вещи из два стола. Каждый другой пример, на который я смотрел, - это просто выбор данных из одной таблицы.

Кто-нибудь знает, как я могу запросить все мои таблицы?

+0

Не смешивайте синтаксис старого и нового стиля. Простое правило: никогда не используйте запятые в предложении 'from'. –

+0

Извинения, я не знал, что у меня были смешанные старые и новые стили. Это то, что мне удалось собрать вместе с просмотром видео и чтением. Я обязательно проверю правильный синтаксис и исправлю его. – Andy

ответ

2

Вы по-прежнему можете выбирать данные из обеих таблиц. Дайте этот снимок:

SELECT DISTINCT 
    users.username 
FROM 
    users 
INNER JOIN 
    user_skills ON users.user_id = user_skills.user_id 
INNER JOIN 
    skills ON (user_skills.skill_id = skills.skill_id AND skills.skill_name = 'Guitar') 
INNER JOIN 
    user_tags ON users.user_id = user_tags.user_id 
INNER JOIN 
    tags ON (user_tags.tag_id = tags.tag_id AND tags.tag_name = 'Rock') 
Смежные вопросы