Mysql определить имя столбца, который будет выбран под внутренний запрос из другой таблицы

У меня есть таблица 1, как это

weight pr_1 pr_2 pr_3 pr_4 pr_5 pr_6 pr_7 pr_8 pr_9
5 41.47 49.06 54.63 49.42 45.24 54.63 45.52 30.7 44.57
6 43.19 51.73 58.81 53.87 46.1 58.81 46.39 31.56 45.43

И таблица 2, как это

country_name price_range
canada pr_1
united_kingdom pr_2
europe pr_3
australia pr_4
japan pr_5
europe_o pr_6
middle_east_africa pr_7
asia pr_8
latin_america pr_9

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

SELECT IN(SELECT `price_range` FROM `ps_parcel_connect_countries` WHERE `country_name`  LIKE  'canada' ) as `price_range` FROM `ps_parcel_connect_weight_ranges` WHERE `weight`<=5

Но когда я запускаю его в phpmyadmin, это дает мне ошибку

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IN(SELECT `price_range` FROM `ps_parcel_connect_countries` WHERE `country_name` ' at line 1

Не вижу никаких ошибок в строке -1, очень странно.

Будет очень полезно, если кто-то может указать мне правильное направление

Спасибо

0

Решение

У вас должно быть, по крайней мере, 3 таблицы здесь. Тот, который имеет данные вашей страны

country
-------
country_id [autoincrement]
country_name [index]

С примерами данных, таких как:

country_id   country_name
----------   ------------
1            Canada
2            United Kingdom
...
9            Latin America

Тот, который имеет весовые градации

weight
------
weight_id [automincrment]
weight_value [index]

С примерами данных, таких как:

weight_id   weight
---------   ------
1           5
2           6

И тот, который связывает страны и веса с ценами

price_by_country_and_weight
--------
price_id [autoincrement]
country_id
weight_id [unique index across country_id and weight_id]
price

С примерами данных, таких как:

price_id    country_id    weight_id   price
--------    ----------    ---------   -----
1           1             1           41.47
2           2             1           49.06
3           3             1           54.63
...
10          1             2           43.19
11          2             2           51.73
...
18          9             2           45.43

Вы бы тогда запросили вот так:

SELECT p.price
FROM country AS c
INNER JOIN price_by_country_and_weight AS p
ON c.country_id = p.country_id
INNER JOIN weight AS w
ON p.weight_id = w.weight_id
WHERE
c.country_name = 'Canada'
AND w.weight <= 5
ORDER BY w.weight ASC
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]