0

MySQ で 3 つのテーブルを結合しようとしていますが、自分のやり方で結合すると、誤った値で重複した行が生成されます。私はそれを正しくやっていないようです。

結合する必要がある 3 つのテーブルがあります。

nt_stentyper
id | tagsten | varenr_tilb | prod_type | dk | no | sv

nt_tunliste
varenummer | tunnummer | beskrivelse 

nt_priser
varenummer | pris

検索したいデータは、 と でグループ化されてvarenummernt_tunlisteますnt_priser。それvarenummerは のために取られvarenr_tilbます。

私はこれを試しました:

SELECT * FROM nt_stentyper 
INNER JOIN nt_tunliste ON nt_stentyper.varenr_tilb = nt_tunliste.varenummer 
INNER JOIN nt_priser ON nt_stentyper.varenr_tilb = nt_tunliste.varenummer 
WHERE nt_stentyper.tagsten = 1 
ORDER BY nt_stentyper.prod_type ASC

...しかし、それは私に次のような重複した行を与えます:

ID  tagsten varenr_tilb prod_type   dk  no  sv  varenummer  tunnummer   beskrivelse  varenummer pris_dk
1   1       12345678    1           1   1   1   12345678    12131415    RT 801       11111111   213
1   1       12345678    1           1   1   1   12345678    12131415    RT 801       12345678   200
5   1       11111111    5           1   1   1   11111111    11111112    Gratbånd     11111111   213
5   1       11111111    5           1   1   1   11111111    11111112    Gratbånd     12345678   200

...それは私が望むものではありません。

クエリは 1 つだけを表示する必要がありますvarenummer

4

3 に答える 3

2

2 番目の結合の条件は と関係があるはずですがnt_priser、最初の結合条件と重複しています。

于 2012-07-23T13:18:07.640 に答える
0

これは、内部結合で使用されるいずれかのテーブルで、結合で使用される列の値が重複しているためです。

これを回避するには、テーブルから重複を削除するか、レコードの選択中に使用GROUP BY nt_stentyper.varenr_tilb または使用します。SELECT DISTINCT *

于 2012-07-23T13:16:20.827 に答える
0

* を選択する代わりに、必要なフィールドのみを選択します。このようなもの:

SELECT id, tagsten, nt_stentyper.varenr, prod_type, dk, no, sv, tunnummer, beskrivelse,     pris_dk FROM nt_stentyper 
INNER JOIN nt_tunliste ON nt_stentyper.varenr_tilb = nt_tunliste.varenummer 
INNER JOIN nt_priser ON nt_stentyper.varenr_tilb = nt_tunliste.varenummer 
WHERE nt_stentyper.tagsten = 1 
ORDER BY nt_stentyper.prod_type ASC

別の無関係なメモとして、デンマーク人以外の誰かが後であなたのコードを見るかどうかわからないので、すべてのコーディングを英語で行うことを強くお勧めします:)

于 2012-07-23T13:23:55.990 に答える