2016-01-28 5 views
3

У меня есть две таблицы. Что-то вроде table1 и table2 приведены ниже:
table1 имеет идентификатор (первичный ключ) и столбцы Aid, Bid и Cid, которые являются первичным ключом таблицы 2.Запрос Mysql с внутренним соединением

table1 

ID Aid Bid Cid 
----------------- 
1 X Y Z 
2 X Z Z 
3 Y X X 
----------------- 

table2 

ID NAME 
------------------ 
X Abc 
Y Bcd 
Z Cde 
------------------ 

Я хочу, чтобы запрос, который закачает все столбцы из table1 таким образом (после замены Aid, Bid и Сида с соответствующими именами, приведенными в table2):

ID A B C 
    1 Abc Bcd Cde 
    2 Abc Cde Cde 
    3 Bcd Abc Abc 

Можете ли вы сказать мне MySQL запрос, чтобы сделать это.?

Большое спасибо за ваши ответы. Но я это получаешь, когда я выполняю эти запросы:

+------+------+------+------+ 
| ID | A | B | C | 
+------+------+------+------+ 
| 3 | bcd | abc | abc | 
| 1 | abc | bcd | cde | 
| 2 | abc | cde | cde | 
+------+------+------+------+ 

Этот запрос: SELECT * FROM table1 JOIN table2 aa ON table1.Aid = aa.ID JOIN table2 bb ON table1.Bid = bb.ID JOIN table2 cc ON table1.Cid = cc.ID;

дает этот результат:

+------+------+------+------+------+------+------+------+------+------+ 
| ID | Aid | Bid | Cid | ID | NAME | ID | NAME | ID | NAME | 
+------+------+------+------+------+------+------+------+------+------+ 
| 3 | Y | X | X | Y | bcd | X | abc | X | abc | 
| 1 | X | Y | Z | X | abc | Y | bcd | Z | cde | 
| 2 | X | Z | Z | X | abc | Z | cde | Z | cde | 
+------+------+------+------+------+------+------+------+------+------+ 

Я думаю, что запрос должен быть изменен немного ..

ответ

3

Должно работать:

select table1.ID, a.NAME AS A, b.NAME AS B, c.NAME AS C 
from table1 
join table2 a on table1.Aid = a.ID 
join table2 b on table1.Bid = b.ID 
join table2 c on table1.Cid = c.ID 

В противном случае:

select table1.ID, a.NAME, b.NAME, c.NAME from table1 join (select * from table2) a on table1.Aid = a.ID join (select * from table2) b on table1.Bid = b.ID join (select * from table2) c on table1.Cid = c.ID 
+0

Спасибо за ваш ответ. Но это дает мне другой результат. См. Мое редактирование по вопросу. – Anjana

+0

Разница заключается в том, что вы выбрали '' ', что не то, что я сделал в своем ответе. Вместо этого вы хотите выбрать только определенные столбцы: 'select table1.ID, aa.NAME, bb.NAME, cc.NAME' –

+0

Получать этот результат + ------ + ------ + - ----- + ------ + | ID | A | B | C | + ------ + ------ + ------ + ------ + | 3 | bcd | abc | abc | | 1 | abc | bcd | cde | | 2 | abc | cde | cde | + ------ + ------ + ------ + ------ + когда я выполняю запросы u сказал .. без изменения .. – Anjana

1
SELECT table1.ID, aa.NAME A, bb.NAME B, cc.NAME C 
FROM table1 
JOIN table2 aa ON table1.Aid = aa.ID 
JOIN table2 bb ON table1.Bid = bb.ID 
JOIN table2 cc ON table1.Cid = cc.ID 
+0

Благодарим вас за ответ. Но это дает мне другой результат.См. Мое редактирование по вопросу. – Anjana

2

Вы можете попробовать это. INNER JOIN & ORDER -

SELECT a.ID, b.NAME, c.NAME, d.NAME 
FROM table1 a 
INNER JOIN table2 b ON b.ID = a.Aid 
INNER JOIN table2 c ON c.ID = a.Bid 
INNER JOIN table2 d ON d.ID = a.Aid 
ORDER BY a.ID 
+0

ohh да, заказ должен быть в этом .. хороший один мой друг. – devpro

+0

@devpro. Ответы также возвращали одни и те же данные с другим порядком. Просто пропустил правильный порядок. :) –

+0

да, мой друг, я проверил этот запрос, на моем dummy db. идеальный, и этот человек заслуживает благодарности :) – devpro

1

Это должно работать для вас:

SELECT t1.ID, t2a.NAME as A, t2b.NAME as B, t2c.NAME as C 
from table1 t1 
INNER JOIN table2 t2a ON t1.Aid = t2a.ID 
INNER JOIN table2 t2b ON t1.Bid = t2b.ID 
INNER JOIN table2 t2c ON t1.Cid = t2c.ID 
ORDER BY t1.ID ASC 
+1

SELECT t1.ID, t2a.NAME as A, t2b.NAME as B, t2c.NAME как C из таблицы1 t1 ВХОДНАЯ СТАНЦИЯ table2 t2a ON t1.Aid = t2a. ID INNER JOIN table2 t2b ON t1.Bid = t2b.ID INNER JOIN table2 t2c ON t1.Cid = t2c.ID ORDER BY t1.ID ASC это работает отлично .. :) – Anjana

+0

рад прочитать эту @Ridhima – devpro

1

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

SELECT ID,(SELECT NAME FROM table2 as t2 WHERE t1.Aid=t2.ID) as A,(SELECT NAME FROM table2 as t2 WHERE t1.Bid=t2.ID) as B,(SELECT NAME FROM table2 as t2 WHERE t1.Cid=t2.ID) as C FROM table1 AS t1 

Благодарности

+0

Это тоже работает. Спасибо ! : D – Anjana

1

Вы можете использовать нижеследующий запрос, чтобы получить des ired results:

SELECT t1.ID AS ID, a.NAME AS A, b.NAME AS B, c.NAME AS C FROM (table1 t1, table2 a, table2 b, table2 c) WHERE (t1.Aid = a.ID AND t1.Bid = b.ID AND t1.Cid = c.ID) ORDER BY t1.ID; 
Смежные вопросы