複数のテーブルに国に基づく同様の情報が含まれている状況があります。データベース スキーマを変更することはできません。ストアド プロシージャの使用には興味がありません。国ごとに 1 つのクエリを実行するよりも、複数の行を返す 1 つのクエリですべてを取得することをお勧めします。
まず、テーブルがあるすべての国をリストした定義テーブルがあります。
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」という名前の 2 つのテーブルがあります。国テーブルにエントリが存在する場合、[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. |
+--------+-------+
助けてくれてありがとう!これを行う唯一の方法がストアド プロシージャを使用する場合、他のオプションはないと思います。その場合、上記のテーブル構造で実行されるプロシージャとクエリの例を一緒に投げていただけませんか?