Mysql查询-联接、子查询(如果存在)

Mysql查询-联接、子查询(如果存在),mysql,Mysql,我正在努力回答一个问题。我就是不能把我的头绕过去 我有4张桌子:库存、款式、尺码、款式和尺码 清单包含用户id、样式、大小等列。 样式包含以下列:样式id、样式(样式名称)等。 大小包含列:大小、id、大小等(sm、md、lg等) 样式大小包含以下列:样式大小id、样式id、大小id(列出所选样式的可用大小) 我需要的是列出用户具有大小并且要按大小进行订购的用户id=x和style=y(而不是style\u id)的所有库存 目前,即使用户没有任何可用的尺寸,也会显示该样式的所有尺寸 这里是到目

我正在努力回答一个问题。我就是不能把我的头绕过去

我有4张桌子:库存、款式、尺码、款式和尺码

清单包含用户id、样式、大小等列。 样式包含以下列:样式id、样式(样式名称)等。 大小包含列:大小、id、大小等(sm、md、lg等) 样式大小包含以下列:样式大小id、样式id、大小id(列出所选样式的可用大小)

我需要的是列出用户具有大小并且要按大小进行订购的用户id=x和style=y(而不是style\u id)的所有库存

目前,即使用户没有任何可用的尺寸,也会显示该样式的所有尺寸

这里是到目前为止的查询

SELECT i.*, st.*, ss.* 
            FROM inventory as i
            JOIN style as st
            ON i.style = st.style
            JOIN style_sizes as ss
            ON st.style_id = ss.style_id
            WHERE i.user_id = $user_id AND i.style = :style

我离这里很近,但我不知道从这里到哪里去。感谢高级版。

您需要在连接中包含
大小\u id
,以便只获取该用户的大小

SELECT i.*, st.*, ss.* 
FROM inventory as i
JOIN style as st
    ON i.style = st.style
JOIN style_sizes as ss
    ON st.style_id = ss.style_id AND i.size_id = ss.size_id
WHERE i.user_id = :user_id AND i.style = :style

您通常应该使用ID作为外键,而不是名称。是。但是变量的调用方式需要使用的是样式而不是样式id。我说的是模式。您仍然可以在
WHERE
子句中使用
style
,但是连接应该使用id。在这种情况下,变量的显示方式我不能。表资源清册没有i.style\u id可连接到st.style\u id。它只有i.style。正常情况下,我绝对会的。没有I.size\u id。所以我加入了size,并将I.size\u id=ss.size\u id更改为si.size\u id。非常感谢。我所需要的只是“AND”。从清单中选择I.*、st.*、ss.*作为I.style=st.style连接大小作为si ON I.size=si.size连接大小作为ss ON st.style\u id=ss.style\u id和si.size\u id=ss.size\u id,其中I.user\u id=$user\u id和I.style=:style如果发布完整的架构,会更容易,我得猜外键是什么。什么是
si
表?