2015-09-22 4 views
1

У меня вопрос о получении данных из таблицы с несколькими объединениями. Таблица 1 содержит информацию (имя и количество), а таблица 2 содержит комбинации. Строка в таблице 2 содержит идентификаторы, которые соответствуют идентификаторам из таблицы 1.Возможны ли множественные объединения в одной таблице?

я стараюсь, чтобы получить информацию из таблицы 1, на основе соответствующих идентификаторов в таблице 2.

Table1

Id | Name | Amount 
-------------------- 
4 | Test 1 |  50 
5 | Test 2 |  60 
6 | Test 3 |  70 
7 | Test 4 |  80 

Table2

id | PriceId | MaterialId | ServiceId 
------------------------------------- 
1 |  4 |   5 |   6 
2 |  4 |   5 |   7 

Запрос

Чтобы получить представление о том, что я пытаюсь достичь:

SELECT * FROM Table1 a 
LEFT JOIN Table2 b ON a.Id = b.PriceId 
LEFT JOIN Table2 c ON a.Id = c.MaterialId 
LEFT JOIN Table2 d ON a.Id = d.ServiceId 
GROUP BY a.Id 

Поэтому я стараюсь, чтобы получить имя и сумму из таблицы 1, соответствующий с идентификаторами в таблице 2, Таким образом:

Когда я выбираю все из таблицы 2 с ID 1 то я пытаюсь получить следующее:

Table 2 with ID 1: PriceId = 4, MaterialId = 6, ServiceId = 6 
Table 1: Test 1, Test 2, Test 3 

Поскольку PriceId 4 соответствует испытанию 1, а MaterialID 6 соответствует испытанию 2 и т. Д.

Надеюсь, что выше ясно. Любая помощь приветствуется!

+0

да возможно, и вы уже обновили пример, поделитесь тем, с чем вы сталкиваетесь. –

+1

Пожалуйста, укажите ваш желаемый результат. –

+0

Прошу прощения за мой непонятный вопрос. Во-первых, запрос не дал всех результатов (только test1 и test2), и после некоторых изменений он дал результаты в одной строке (что нежелательно). Решение - ваш ответ, XL ant. Благодарю. –

ответ

2

Кажется, вы приближаетесь к нему с неправильного направления. То, что вы действительно хотите:

SELECT t2.PriceId AS PriceId, 
    t2.ServiceId AS ServiceId, t1p.Name AS PriceName, 
    t1m.Name AS MaterialName, t1s.Name AS ServiceName 
FROM Table2 t2 
LEFT JOIN Table1 t1p ON t2.PriceId = t1p.Id 
LEFT JOIN Table1 t1m ON t2.MaterialId = t1m.Id 
LEFT JOIN Table1 t1s ON t2.ServiceId = t1s.Id 
+1

@ XLAnt спасибо за скрипку. Не удалось заставить сайт работать при отправке моего ответа. – Fox

+0

Perfect X.L.Ant! Я действительно ошибался, потому что мой первый запрос дал результаты в одной строке. Спасибо большое! –

0

Да, вы можете использовать этот путь ... Смотрите мой пример:

select * from movies 
inner join relationship as r1 on movies.id=r1.movie_id 
inner join relationship as r2 on movies.id=r2.movie_id 
where r1.Taxonomy_id ="xyz" 
and r2.Taxonomy_id="abc" 
GROUP BY movies.id 

Это будет работать для вас. Я сделал это в одном из моих проектов

+0

Спасибо Yo Yo за ваш ответ, я использую запрос XL ant. Это также решило мой вопрос. –

+0

Thats great Maurice !! –

Смежные вопросы