0

2つの列を持つテーブルtblNoCompがあり、両方ともtblPackage.IDを指す外部キーです。OneIDtblNoCompの目的は、これらのパッケージのIDを2つの列に格納するだけで、相互に互換性のないパッケージを格納することTwoIDです。

それを保存する最良の方法ではないかもしれませんが、複数のパッケージは他のパッケージと互換性がないため、最も論理的であるように思われました。

2つのtblPackage.Nameを並べて表示するビューを作成しようとしています-次のものがありますが、TwoIDパッケージ名を取得する方法がわかりません。

SELECT tblNoCompOneIDtblPackagesPackagetblNoCompTwoIDtblPackagesPackage FROM tblNoComp、tblPackages WHERE(tblNoCompOneID= tblPackagesPID

現在2番目tblPackagesPackageTwoIDではなくOneID名を表示しているだけです。解決方法がわかりませんか?

ありがとうございました!

-お詫び申し上げます。簡単な質問ですが、1時間検索しましたが、問題を正しく説明できていません。

4

1 に答える 1

0

コメントにあるコード:

SELECT
  tblNoComp.OneID,
  tblPackages.Package AS OneIDPackageName,
  tblNoComp.TwoID,
  tblPackages.Package AS TwoIDPackageName
FROM
  tblNoComp
  LEFT JOIN tblPackages
    ON tblNoComp.OneID = tblPackages.PID

テーブルの代わりに列をエイリアシングしています。エイリアシングの背後にある考え方は、JOIN2つの異なるエイリアスを使用して、同じテーブルを2つの異なるテーブルとして2回使用することです。参加するのは1回だけで、2回使用しようとしています。

あなたはおそらくこのような何かを意図しています:

SELECT
  tblNoComp.OneID,
  tblOnePackages.Package AS OneIDPackageName,
  tblNoComp.TwoID,
  tblTwoPackages.Package AS TwoIDPackageName
FROM
  tblNoComp
  LEFT JOIN tblPackages AS tblOnePackages
    ON tblNoComp.OneID = tblOnePackages.PID
  LEFT JOIN tblPackages AS tblTwoPackages
    ON tblNoComp.TwoID = tblTwoPackages.PID

(MySQL構文チェッカーが手元にないので、正しく実行するためにこれを微調整する必要があるかもしれないことに注意してください。)

同じテーブルが2つの異なるキーで2回結合され、そのたびに異なるエイリアスが与えられるため、SELECT句内で2つの別個のテーブルとして参照できることに注意してください。

于 2012-06-25T05:39:36.607 に答える