Как получить правильное значение, используя соединение - PullRequest
0 голосов
/ 08 октября 2011

Это сводит меня с ума, я уверен, что это довольно просто, но я не могу понять это правильно.

Наличие таблицы, содержащей значения тарифов для разных лет:

Ratevaluetable

Year   Value A  Value B  Value C
2009     10      15       20
2010     12      18       22
2011     14      21       25

Тогда яесть еще один persontable:

User    Time      Price
john    2010      value B
Tina    2009      Value C
Bill    2011      Value C

Теперь мне нужно объединить две таблицы, чтобы получить значение в столбце Price, замененное данными из Ratevaluetable.

Я могу присоединиться вовремя в год, но я не знаю, как присоединиться к полям Value?

Ответы [ 2 ]

1 голос
/ 08 октября 2011

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

То, что будет возможным, будет:

Table ValueTypes:
Id    Description
1     Value A
2     Value B
3     Value C

Table RateValueTable:
Year     ValueTypeId     Value
2009     1               10
2009     2               15
2009     3               20

Table User:
User    Time      ValueTypeId
john    2009      2

Учитывая приведенную выше схему, вы можете присоединить User к RateValueTable очевидным образом.

0 голосов
/ 08 октября 2011

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

SELECT persontable.User, persontable.Time, CASE WHEN persontable.Price = 'value a' THEN `Ratevaluetable.Value A` WHEN persontable.Price = 'value b' THEN `Ratevaluetable.Value B` WHEN persontable.Price = 'value c' THEN `Ratevaluetable.Value C` AS 'price' FROM persontable, Ratevaluetable WHERE persontable.Time = Ratevaluetable.year
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...