У меня есть ситуация, когда несколько таблиц содержат аналогичную информацию, основанную на стране. Изменение схемы базы данных не является вариантом, я не заинтересован в использовании хранимой процедуры. Я бы предпочел захватить все в одном запросе, возвращающем несколько строк, чем выполнение одного запроса для каждой страны.
Во-первых, у меня есть таблица определений, в которой перечислены все страны, в которых мы имеем таблицы:
countries
+============+========+
| country_id | prefix |
+============+========+
| 1 | us |
+------------+--------+
| 2 | ca |
+------------+--------+
Во-вторых, у меня есть таблица отношений:
relationships
+========+============+==============+
| rel_id | country_id | upc |
+========+============+==============+
| 1 | 1 | 111111111111 |
+--------+------------+--------------+
| 2 | 2 | 111111111111 |
+--------+------------+--------------+
| 3 | 1 | 222222222222 |
+--------+------------+--------------+
| 4 | 2 | 222222222222 |
+--------+------------+--------------+
| 5 | 2 | 333333333333 |
+--------+------------+--------------+
| 6 | 1 | 444444444444 |
+--------+------------+--------------+
Затем у меня есть две таблицы с именем «us_products» и «ca_products». Если в таблице стран существует запись, тогда существует таблица с именем [countries.prefix] _products. Все таблицы * _products идентичны друг другу. Те же столбцы и те же типы данных.
us_products
+============+==============+=======+
| product_id | upc | title |
+============+==============+=======+
| 1 | 111111111111 | Shoe! |
+------------+--------------+=======+
| 2 | 222222222222 | Tie |
+------------+--------------+=======+
| 3 | 444444444444 | Sock |
+------------+--------------+=======+
ca_products
+============+==============+=======+
| product_id | upc | title |
+============+==============+=======+
| 1 | 111111111111 | Shoe. |
+------------+--------------+=======+
| 2 | 222222222222 | Tie |
+------------+--------------+=======+
| 3 | 333333333333 | Shirt |
+------------+--------------+=======+
Цель состоит в том, чтобы запрос отформатировал что-то похожее на следующее (очевидно, это не работает, иначе я бы не стал задавать этот вопрос ...):
SELECT
countries.prefix,
products.title
FROM
relationships
INNER JOIN
[countries.prefix]_products AS products
ON
relationships.upc = products.upc
WHERE
relationships.upc = '111111111111'
Должен вернуться:
+========+=======+
| prefix | title |
+========+=======+
| us | Shoe! |
+--------+-------+
| ca | Shoe. |
+--------+-------+
Спасибо за помощь! Если ЕДИНСТВЕННЫЙ способ сделать это через хранимую процедуру, то я предположил, что у меня нет другой опции, и в этом случае вы не могли бы собрать пример процедуры и запроса, которые будут выполняться над вышеупомянутыми структурами таблиц?