加入三个MySQL表

时间:2018-01-22 14:54:18

标签: mysql sql join

我有三张桌子:

Three tables

== types_carac
|------
|------
|//**idTypeProd**//|int(11)|Non|
|//**idCarac**//|int(11)|Non|
|1|1
|1|2
|1|3
|2|0
|2|2
|2|3

SELECT * 
FROM types_carac as T, caracteristiques as C, liste_caracteristiques as L 
WHERE T.idCarac = C.idCarac 
AND C.idCarac = L.idCarac 
AND idTypeProd = 2 
AND libelleCarac = "Screen size"

|idTypeProd|idCarac|idCarac|libelleCarac|idCarac|refproduit|valeur
|2|2|2|Screen size|2|4942|7
|2|2|2|Screen size|2|8149|12
|2|2|2|Screen size|2|9980|15cm
|2|2|2|Screen size|2|10300|4cm
|2|2|2|Screen size|2|10316|8.3cm

当libelleCarac为“屏幕大小”且idTypeProd = 2

时,我需要获取“valeur”的所有值

所以我尝试使用:

|idTypeProd|idCarac|idCarac|libelleCarac|idCarac|refproduit|valeur
|2|2|2|Screen size|2|4942|7
|2|2|2|Screen size|2|8149|12

在我的结果中,某些值未与idTypeProd = 2

链接

我有:

IsCommodity

我需要

IsAssembly

实际上我只需要idType = 2的Screen Size值,我的查询看起来不错,但结果不是

2 个答案:

答案 0 :(得分:2)

让我知道这是否有效。它使用现代连接语法,如果有错误,更容易阅读和调试。此查询将您的三个表连接在一起,然后返回valeuridTypeProd为2且libelleCarac为屏幕大小。

SELECT  valeur
FROM    liste_caracteristiques lc
JOIN    caracteristiques c on c.idCarac = lc.idCarac
JOIN    types_carac tc on tc.idCarac = c.idCarac
WHERE   tc.idTypeProd = 2
AND     libelleCarac = "Screen size"

答案 1 :(得分:0)

您可以在评论部分使用JOIN进行此查询,如上所述:

SELECT
    TC.idTypeProd
    ,LC.idCarac
    ,C.libelleCarac
    ,LC.refproduit
    ,LC.valeur
FROM liste_caracteristiques LC
INNER JOIN types_carac TC
    ON LC.idCarac = TC.idCarac
    AND idTypeProd = 2
INNER JOIN caracteristiques C
    ON TC.idCarac = C.idCarac
    AND libelleCarac = 'Screen size'