2013-10-15 2 views
0

Так я поясню есть база данных, которая выглядит следующим образом:Возникли проблемы с простым внутренним присоединиться к MySQL

card_types 
id description price 
1  Card1   1.00 
2  Card2   2.00 
3  Card3   3.00 

card_occasions 
id occasion 
1  birthday 
2  graduation 
3  thank you 
4  other 

type_occasions 
ID TypeID OccasionID 
1  1  1 
2  1  2 
3  1  4 
4  2  3 

Я пытаюсь сделать внутреннее соединение с использованием WHERE card_type.ID = 1 в результате аналогичного но я не знаю, с чего начать.

Пример вывода:

card_occasion.ID card_occasions.Name 
1     birthday 
2     graduation 
4     other 

Любая помощь будет оценена. Спасибо.

+1

Можете ли вы разместить запрос? –

+0

Thats the problem Я не знаю, что делать для запроса. – user1831430

+0

Вы хотите присоединиться ко всем 3 столам? –

ответ

1

Поскольку type_occasions уже владеет типом, вам не нужно присоединяться к таблице типов.

SELECT o.id, o.occassion 
FROM card_occasions o 
INNER JOIN type_occasions t ON t.occassionid = o.id 
WHERE t.typeid = 1 
+0

Я не понимаю, почему это не ваш ответ, который выиграл очки! –

+0

Извините за такой плохо написанный вопрос. Я нахожусь в крайнем сроке с этим проектом, над которым я работаю, и у меня не было много времени, чтобы написать его/объяснить. Я все еще изучаю этот MySQL, соединяющий материал. – user1831430

1

Вы начинаете со стола, где хотите значения. После Join таблице вам нужно сделать отношение.

SELECT card_occasions.id, card_occasions.occasion 
FROM card_occasion co 
INNER JOIN type_occasions to ON (to.OccasionID = co.id) 
              ^the relation between two table 
WHERE ct.ID = 1 
+0

Почему, по вашему мнению, ваш ответ имеет значительную ценность в дополнение к моей? – Zeemee

+1

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

+0

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

1
SELECT A.id,A.occasion FROM card_occasions A JOIN type_occasions B ON B.OccasionID= A.id AND B.TypeID=1 
+1

это отлично сработало спасибо! – user1831430

+1

@ user1831430 Это не о том, что «работает», но что отвечает на ваш вопрос лучше всего. Ваш вопрос: «using WHERE card_type.ID = 1». – Zeemee

+0

Я впервые увидел этот ответ. Я не видел других, пока не обновился. – user1831430

1

И если вы действительно хотите, чтобы связать все три таблицы для почему мы не видим здесь, вы можете использовать этот метод. Это начинается с привязки таблицы type_occasion к соответствующим «базовым данным».

Select 
    typeo.OccasionID, co.occasion as Name 
From type_occasion typeo 
    JOIN card_type ct ON (typeo.TypeID=ct.id) 
    JOIN card_occasion co ON (typeo.OccasionID=co.id) 
Where 
    typeo.TypeID=1 
    -- ct.id=1 
Смежные вопросы