1

SQL クエリについて質問があります。ASP.NET Visual Studio でプロトタイプ Web ショップを構築しています。現在、製品を表示するためのソリューションを探しています。MS Access でデータベースを構築しました。複数のテーブルで構成されています。

私の質問にとって重要な表は次のとおりです。

  • 製品
  • 製品写真
  • 写真

以下に、テーブル間の関係が表示されます

私にとって重要なのは、商品名、価格、画像の 3 つのデータ型を取得することです。商品名、価格はProduct表のとおりです。画像はFoto表にあります。

商品には複数の写真を含めることができるため、それらの間には N - M の関係があります。だから私はそれを分割しなければなりません、私はProductfoto表でそれをしました。

したがって、それらの間の接続は次のとおりです。

product.artikelnummer -> productfoto.artikelnummer 
productfoto.foto_id -> foto.foto_id

次に、ファイル名を読み取ることができます (データベース内: foto.bestandnaam)

最初の内部結合を作成し、Access でテストしました。これは機能します。

SELECT titel, prijs, foto_id
FROM Product
INNER JOIN Productfoto
ON product.artikelnummer = productfoto.artikelnummer

しかし、別の が必要INNER JOINです。どうすればそれを作成できますか? 私はこのようなものだと思います(これは私にエラーを与えます)

SELECT titel, prijs, bestandnaam
FROM Product 
(( INNER JOIN Productfoto ON product.artikelnummer = productfoto.artikkelnummer )
INNER JOIN foto ON productfoto.foto_id = foto.foto_id)

誰でも私を助けることができますか?

4

2 に答える 2

3

このようなものはうまくいくはずです:

SELECT Product.titel, Product.prijs, Foto.bestandnaam FROM Product INNER JOIN
(Foto INNER JOIN Productfoto ON Foto.[foto_id] = Productfoto.[foto_id]) ON
Product.[artikelnummer] = Productfoto.[artikelnummer];
于 2012-06-10T13:13:39.250 に答える
1

リンクテーブルの使用に関する1つのこと

ProductFoto テーブルは、実際に Product と Foto の間の NM 関係を可能にします。これはあなたが本当に欲しい/必要としているものですか?つまり、1 つの写真が複数の製品に属することはできますか? そうでない場合は、Product_Id を Foto テーブルに配置します。もしそうなら、...

...JOIN について説明しましょう。

A と B の 2 つのテーブルがあるとします。

SELECT * FROM A, B

Aの行とBの行のすべての順列が得られます。のようWHEREな節を追加することで、結果セットを制限することができます。これは実際に結果のように見え始めます!WHERE A.a='lekker hoor!'WHERE A.id=B.a_idJOIN

JOIN次に、適切な処理を行います。

SELECT * FROM A JOIN B ON A.id=B.a_id

JOINs が実際に入ったりLEFT OUTER、結合RIGHT OUTERFULL INNERたりします。FULL OUTER

  • A LEFT JOIN(の使用OUTERはオプション) は、右側 (2 番目) のテーブルに対応するレコードがない場合でも、左側 (1 番目) のテーブルのすべてのレコードを含みます。
  • ARIGHT JOINは明らかに同じように機能しますが、ミラー化されています。
  • 両方のFULL OUTER JOINテーブルはオプションです (まったく同じではありませSELECT * FROM A, Bん!)。
  • AFULL INNERは、両方のテーブルから一致するレコードを必要とします (これがデフォルトです)。

複数のことをしたいときはJOIN

SELECT * FROM 
  A 
  JOIN B ON A.id=B.a_id
  JOIN C ON B.id=C.b_id

JOINエクストラは、A と B を結合することによって形成される中間テーブルでの結合と考えることができます。特に、いくつかのLEFT/ RIGHT/ INNER/が混在している場合はそうOUTER JOINです。


あなたの質問について は、

SELECT TOP (1) titel, prijs, bestandnaam
FROM 
( -- this bracket is MS Access specific (and awkward)
  Product 
  INNER JOIN Productfoto ON product.artikelnummer = productfoto.artikelnummer
) -- this one too
  INNER JOIN foto ON productfoto.foto_id = foto.foto_id
  • MS Access を満たすには、最初の 2 つのテーブルを括弧で囲みます。Ms-Access: Join 3 Tablesを参照してください。
  • 通常、ブラケットは必要ありません (セクシーなサブ選択を発見した場合、このようにブラケットを使用することができます。ルールは、代替手段がない場合にのみ使用します)。
  • ProductFoto テーブルに複数の一致があるため、結果にも複数の一致があります。これを「修正」するには、TOP 1 (または DB によっては LIMIT 1) を使用します。

Veel success, en doe jezelf een plezier en switch to English !

于 2012-06-10T15:46:53.633 に答える