2

私は mySQL データベースを持っていますが、名前ではなくテーブル内の位置で列を選択できるかどうか疑問に思いました。
次の列を持つテーブル (英語とフランス語の混合データ) があるとします。

id
en_name
en_phone
en_address
fr_name
fr_phone
fr_address

しかし、これはデモンストレーションのみを目的としており、実際のテーブルには 20 の英語列と 20 のフランス語列があります。
に名前を記載せずに、すべて英語またはすべてフランス語の列を選択することはできますSELECTか?
これが不可能な場合のベストプラクティスは何ですか?

4

2 に答える 2

6

標準 SQL を使用すると、答えはノーです。次のような構造はありません。

select fr_*

で始まるすべての列を取得しますfr_

動的 SQL (準備済みステートメント) を使用して、必要な SQL を生成できます。ビューを使用して、英語列またはフランス語列のみを選択できます。列が異なる行にあり、選択で使用される言語識別子があるようにデータを保存できます。一部のデータベースでは、ストアド プロシージャを使用して、必要な列のみを返すことができます。

ただし、SQL クエリを使用するだけでは、そのような柔軟性はありません。

編集:

次のようなビューを作成できます。

create view table_fr as
     select id, fr_name, fr_phone, fr_address
     from t;

ただし、ベスト プラクティスは、言語を別の列として格納するテーブルを用意することです。

id
Language
Name
Phone
Address

また、単一のデータをid複数の行 (言語ごとに 1 行) に分割します。ID に関する言語に依存しない情報用の別のテーブルがある場合があります。

于 2013-07-07T11:48:38.317 に答える