1

SQL Server データベースに 3 つのテーブルがあります。

この図に示すように、それらは互いにリンクされています (線は図の右側の行に接続されています)。

小胞体モデル

修復されたものに関するいくつかの情報を含むすべての賠償金を返すクエリがありますtblreparationsが、代わりに、クライアント (オランダ語で klant) が割り当てたラップトップごとに 1 回、賠償金テーブルを 3 回返します。 (オランダ語で reparaties)laptopID各行に 1 つだけ含まれます

これはクエリです:

SELECT AankopenReparaties.Id, 
       AankopenReparaties.KlantenId, 
       AankopenReparaties.actietype, 
       AankopenReparaties.voorwerptype, 
       laptopscomputers.merk, 
       laptopscomputers.model, 
       laptopscomputers.info, 
       AankopenReparaties.info, 
       AankopenReparaties.Prijs, 
       AankopenReparaties.lopend 
FROM AankopenReparaties, laptopscomputers 
WHERE (aankopenreparaties.lopend = 'lopend');

これを返す

クエリ結果

補償テーブル (aankopenreparaties) には 1 つの行しか含まれていないため、1 つの行のみである必要があります。laptopID

これを修正する方法を知っている人はいますか?

もうすぐ修正されるはずなので助けてください(学校の課題です)

4

1 に答える 1

6

あまりにも多くのレコードを返す理由は、クエリが両方のテーブルのデカルト積を生成するためです。2 つのテーブルが互いにどのように関連しているかをサーバーに伝える必要があります。

SELECT  AankopenReparaties.Id,
        AankopenReparaties.KlantenId,
        AankopenReparaties.actietype,
        AankopenReparaties.voorwerptype,
        laptopscomputers.merk,
        laptopscomputers.model,
        laptopscomputers.info,
        AankopenReparaties.info,
        AankopenReparaties.Prijs,
        AankopenReparaties.lopend
FROM    AankopenReparaties
        INNER JOIN laptopscomputers
            ON AankopenReparaties.LaptopID = laptopscomputers.ID -- specify relationship
WHERE   aankopenreparaties.lopend = 'lopend'

結合についてさらに詳しく知りたい場合は、以下のリンクにアクセスしてください。


于 2013-03-13T15:36:04.850 に答える