2015-06-01 2 views
1

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

Описание проблемы:

У меня есть две таблицы.
Первая таблица - defenition_list имеет уникальный идентификатор и имя

ID | NAME 
----------- 
1 | BMW 
2 | AUDI 
3 | VW 
4 | MAZDA 

Вторая таблица - used_id имеет идентификатор из первой таблицы

ID | def_uid1 | def_uid2 | def_uid3 
------------------------------------ 
1 | 2  |  3 | 2  
2 | 4  |  2 | 1 

Так обычно Если мне нужно возвращать значение только из одного столбца , Я бы выбрал:

SELECT d.NAME, u.def_uid1 FROM defenition_list d, used_id u WHERE d.ID=u.def_uid1 

Но как написать запрос для получения имен def_uid2 и def_uid3 в одно и то же время? Так результат будет выглядеть следующим образом:

ID | def_uid1 | def_uid2 | def_uid3 | 
-------------------------------------- 
1 | AUDI | VW  | AUDI | 
2 | MAZDA | AUDI | BMW | 
+0

, что зависит от того, что вы хотите, хотите ли вы присоединиться к двум таблицам на основе равенства 'defenition_list.ID' и любых/всех столбцов в' used_id' или что? –

+0

См. Нормализацию. – Strawberry

+0

http://sqlfiddle.com/#!9/a6973/2 - Я предположил, что вы хотели перечислить в базу данных 3-го автомобильного бренда пользователя. U может добавить дополнительный пользовательский ТАБЛ и установить user_pref table primary_key (user_id, id_brand). Надеюсь, это помогло. – Falt4rm

ответ

1

У вас есть два варианта. Одним из вариантов является объединение табличного несколько раз, один раз для каждого столбца, нужно захватить, или вы можете написать подзапросы внутри вашего выбора пункта для каждого столбца, например:

SELECT 
    u.id, 
    (SELECT name FROM definition_list WHERE id = u.def_uid1) AS def_uid1, 
    (SELECT name FROM definition_list WHERE id = u.def_uid2) AS def_uid2, 
    (SELECT name FROM definition_list WHERE id = u.def_uid3) AS def_uid3 
FROM used_id u; 

Вот SQL Fiddle пример, используя как варианты, о которых я говорил.

+0

Я предпочитаю вариант 3 !! – Strawberry

+0

@Strawberry, какая у вас альтернатива? – AdamMc331

+0

Почему, конечно, нормализация! – Strawberry

2

Вы должны были бы присоединиться к вашей таблице имена 3 раза:

SELECT used_id.ID, d1.name, d2.name, d3.name 
FROM used_id 
LEFT JOIN definition_list AS d1 ON used_id.def_uid1 = d1.id 
LEFT JOIN definition_list AS d2 ON ... 
LEFT JOIN definition_list AS d3 ON ... 
Смежные вопросы