0

複数のテーブルに国に基づく同様の情報が含まれている状況があります。データベース スキーマを変更することはできません。ストアド プロシージャの使用には興味がありません。国ごとに 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. |
+--------+-------+

助けてくれてありがとう!これを行う唯一の方法がストアド プロシージャを使用する場合、他のオプションはないと思います。その場合、上記のテーブル構造で実行されるプロシージャとクエリの例を一緒に投げていただけませんか?

4

1 に答える 1

3

ビューを作成したくない場合は、一般的なテーブル式を「一時的な」ビューとして使用できます。

with normalized_products as (
   select 1 as country_id, 
          product_id, 
          upc,
          title 
   from us_products
   union all
   select 2 as country_id, 
          product_id, 
          upc,
          title 
   from ca_products
) 
SELECT countries.prefix,
       products.title
FROM relationships as rel
  JOIN normalized_products as prod
    ON rel.upc = prod.upc
   and rel.country_id = prod.country_id
where rel.upc = '111111111111'

ただし、データモデルを修正してください。これはますますあなたを傷つけるでしょう

于 2013-01-09T16:57:56.493 に答える