连接三个MySQL表

连接三个MySQL表,mysql,sql,join,Mysql,Sql,Join,我有三张桌子: 及 及 当libelleCarac为“屏幕大小”且idTypeProd=2时,我需要获得“valeur”的所有值 所以我试着用: 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 libelleCara

我有三张桌子:

当libelleCarac为“屏幕大小”且idTypeProd=2时,我需要获得“valeur”的所有值

所以我试着用:

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=2链接

我有:

|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
我需要

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

事实上,我只需要屏幕大小值idType=2,我的查询看起来不错,但结果并不理想。请告诉我这是否有效。它使用了现代的连接语法,如果出现错误,它更易于阅读和调试。此查询将三个表连接在一起,然后返回
valeur
值,其中
idTypeProd
为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"

让我知道这是否有效。它使用了现代的连接语法,如果出现错误,它更易于阅读和调试。此查询将三个表连接在一起,然后返回
valeur
值,其中
idTypeProd
为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"

您可以在“注释”部分中使用如上所述的
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'

您可以在“注释”部分中使用如上所述的
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'


今天的提示:切换到现代的显式
JOIN
语法。更易于写入(无错误),更易于读取(和维护),并且在需要时更易于转换为外部联接。添加示例表数据和预期结果。(请使用格式化文本,而不是图像。)Where子句的idTypeProd=2,这意味着您只能看到idTypeProd=2的记录的结果,我发现很难相信您显示的前两个记录是错误的。您希望如何区分当前输出和所需输出之间的数据,除了最后两个,他们都一样columns@Sydowh回答的问题是正确的,您的数据是错误的提示:切换到现代的显式
JOIN
语法。更易于写入(无错误),更易于读取(和维护),并且在需要时更易于转换为外部联接。添加示例表数据和预期结果。(请使用格式化文本,而不是图像。)Where子句的idTypeProd=2,这意味着您只能看到idTypeProd=2的记录的结果,我发现很难相信您显示的前两个记录是错误的。您希望如何区分当前输出和所需输出之间的数据,除了最后两个,他们都一样columns@Sydowh回答的问题是正确的,您的数据是错误的,结果与我的相同query@Sydowh如果这是错误的,那么您的怀疑值是多少?这就是您所描述的,您提到您想要的数据,其中idTypeProd是2,libelleCarac是屏幕大小,如果此查询错误,则数据库中的数据不正确当我仅选择idTypeProd=2和“屏幕大小”时,我得到了一个很好的结果,但当我添加liste_caracteristiques表时,我得到了未链接到idTypeProd=2的结果,结果显示它们都是idTypeProd=2,但我非常确定它们不是,将我的dataSame结果作为我的query@Sydowh如果这是错误的,那么您的怀疑值是多少?这就是您所描述的,您提到您想要的数据,其中idTypeProd是2,libelleCarac是屏幕大小,如果此查询错误,则数据库中的数据不正确当我仅选择idTypeProd=2和“屏幕大小”时,我得到了一个很好的结果,但当我添加liste_caracteristiques表时,我得到了未链接到idTypeProd=2的结果,结果显示它们都是idTypeProd=2,但我非常确定它们不是,在我的查询中查看我的dataSame结果,我也尝试了JOIN,也许这是一个结构性问题。你应该先放一些样本数据,然后看看有什么问题。结果与我的查询相同,我也尝试了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'