在MySQL中连接3个表会给出带有值的重复行

时间:2012-07-23 13:00:35

标签: php mysql select join

我正在尝试在MySQ中加入三个表,但是当我按照我的方式执行时,我会得到具有不正确值的重复行。似乎我没有正确地做到这一点。

我需要加入三个表:

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

......这不是我想要的。

查询应该只显示一个varenummer

3 个答案:

答案 0 :(得分:2)

第二次加入的条件应与nt_priser有关,但它与第一​​次加入条件重复。

答案 1 :(得分:0)

这是因为内连接中使用的任何一个表都具有连接中使用的列的重复值。

要避免这种情况,您可以从表中删除重复项     或使用GROUP BY nt_stentyper.varenr_tilb 或在选择记录时使用SELECT DISTINCT *

答案 2 :(得分: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

在另一个不相关的说明中,我强烈建议你用英语编码,因为你永远不知道是否有人(非丹麦语)会在以后查看你的代码:)