2012-06-25 3 views
0

У меня есть таблица tblNoComp, которая имеет два столбца, оба внешних ключа, указывающие на tblPackage.ID. Цель tblNoComp - хранить, какие пакеты несовместимы друг с другом, просто сохраняя идентификатор этих пакетов в двух столбцах, OneID и TwoID.Создание представления: множественные отношения внешних ключей к одной таблице

Не может быть лучшим способом его хранения, но поскольку несколько пакетов несовместимы с другими, это, по-видимому, является наиболее логичным.

Попытка создать представление, которое показывает tblPackage.Name для двух бок о бок - у меня есть следующие, но не знаете, как получить TwoID Имя пакета ..

ВЫБРАТЬ tblNoComp. OneID, tblPackages. Package, tblNoComp. TwoID, tblPackages. Package ОТ tblNoComp, tblPackages ГДЕ (tblNoComp. OneID = tblPackages. PID)

В настоящее время второй tblPackages. Package просто показывает имя OneID, а не TwoID .. Не знаете, как решить?

Спасибо!

- При наличии простого вопроса я искал час, но не смог правильно описать свою проблему.

+0

Возможный дубликат [Как вы присоединяетесь к одной таблице дважды в mysql?] (Http://stackoverflow.com/questions/199953/how-do-you-join-on-the-same-table -twice-in-mysql) – David

+0

Чтобы дать резюме, вам, по сути, нужно сделать «псевдоним» объединенной таблицы в запросе, чтобы вы могли присоединиться к ней дважды под двумя именами (на двух клавишах). По существу, обрабатывать ту же таблицу, что и две отдельные объединенные таблицы. – David

+0

Также полезно: http://stackoverflow.com/q/3201359/328193 и http://stackoverflow.com/q/7515202/328193 и http://forums.mysql.com/read.php?10,190885 – David

ответ

0

Код, который вы имеете в своем комментарии:

SELECT 
    tblNoComp.OneID, 
    tblPackages.Package AS OneIDPackageName, 
    tblNoComp.TwoID, 
    tblPackages.Package AS TwoIDPackageName 
FROM 
    tblNoComp 
    LEFT JOIN tblPackages 
    ON tblNoComp.OneID = tblPackages.PID 

ли альясинг столбцов вместо таблиц. Идея псевдонимов заключается в том, что в таблице JOIN эта же таблица используется в двух разных таблицах, используя два разных псевдонима. Вы только присоединяетесь к нему один раз и пытаетесь использовать , используя его.

Вы, вероятно, намерение что-то больше, как это:

SELECT 
    tblNoComp.OneID, 
    tblOnePackages.Package AS OneIDPackageName, 
    tblNoComp.TwoID, 
    tblTwoPackages.Package AS TwoIDPackageName 
FROM 
    tblNoComp 
    LEFT JOIN tblPackages AS tblOnePackages 
    ON tblNoComp.OneID = tblOnePackages.PID 
    LEFT JOIN tblPackages AS tblTwoPackages 
    ON tblNoComp.TwoID = tblTwoPackages.PID 

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

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

+0

Удивительное - это прекрасно работает. Мне нужно изучить это больше, так как теперь я вижу, где вы определили два псевдонима. Спасибо. – lieb39

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