2009-06-29 8 views
1

私はAccess/Jetバックエンドでphpを使ってデモアプリケーションを手に入れました。ジェット(アクセス)の結合の列にプレフィックスを付けることはできますか?

People 
------ 
ID 
BankID // foreign key in Banks 
Name 
Address 

Banks 
-------- 
ID 
Name 
Address 

は私が参加やってる:

SELECT * FROM People LEFT JOIN on People.BankID = Banks.ID 

名前の衝突を回避する最善の方法は何ですか私はこれらの(簡体字)のテーブルを持っていますか?これは動作します:

SELECT People.*, 
Banks.ID as BankID, 
Banks.Name as BankName, 
Banks.Address as BankAddress 
FROM People LEFT JOIN on People.BankID = Banks.ID 

しかし、あなたはいくつかの列以上を持っているとひどい言い方になります。 「Banks」テーブルの列のすべてにプレフィックスを付けると言うことができますか?

答えて

2

いいえ、別名を使用してテーブル名を短縮することはできますが、

さて、今は遅すぎる可能性がありますが、重複するフィールド名を完全に避けるフィールド命名規則を使用しています。 Tony's Table and Field Naming Conventions好きな人もいます。一部の人々は、独自に同じソリューションを考え出しています。他の人はそれを嫌う。 shrug

これは、クエリービルダーを使用すると、Accessが生成するSQL文を見るときに、すべてのテーブル名にアクセスします。

+0

は、ISO/IEC 11179情報技術メタデータは、パート5のレジストリを見てみましょう:ここP1B1は相関名です。あなたの主題を研究するのに害はありませんか?あまりにも遅くない;) – onedaywhen

+0

アイデアをありがとう。もちろん、この特定のケースでは、私も会社テーブルを持っており、会社と人の両方が銀行を持つことができ、どちらも同じコンテキストで発生する可能性があるので、役に立たないでしょう。したがって、私はPersonBankIDとCompanyBankIDを区別する必要があります:) – sprugman

+0

@sprugmanそれは私の命名規則が扱うものです。その特定の場合、フィールドはcBankIDとpBankIDという名前になります。 –

0

あなたがオンにすることができる「プレフィックスマイカラム」機能はありませんが、すでにPHPで作業しているので、適切な「AS」キーワードでSQLを生成するのは簡単です。いくつかの文字列を比較して、必要なフィールドとテーブルをループするだけです。

Tonyが言及したように、クエリビルダーを使用するとAccessが自動的にこれを行います。したがって、クエリが事前定義されている場合は、Accessがこれを行うことができます。

0

SQLの列を修飾するために、テーブルの相関名(大まかに「エイリアス」)を使用します。ネーミングと識別の原則:

SELECT P1.*, 
     B1.ID AS BankID, 
     B1.Name AS BankName, 
     B1.Address AS BankAddress 
    FROM People AS P1 
     LEFT OUTER JOIN Banks AS B1 
      ON P1.BankID = B1.ID; 
関連する問題