如何最好地使用SQL来查找与多个WHERE子句匹配的公共ID

Cod*_*rus 2 sql

所以我刚开始学习SQL,并遇到了以下问题.假设我有一个包含3列的表,如下所示:

ID    | Property_Name    | Property_Value
1     | Color            | "Blue"
1     | Size             | "Large"
2     | Color            | "Red"
3     | Color            | "Orange"
3     | Size             | "Small"
4     | Color            | "Blue"
4     | Size             | "Large"
...

现在,假设我想找到具有Color = Blue和Size = Large(又名.ID 1和4)的ID,我最好如何做到这一点.我提出的最好的方法是以下,但它似乎笨重......

SELECT ID FROM PropertyTable
WHERE
ID IN (
        SELECT ID FROM PropertyTable WHERE
        Property_Name='Color' AND Property_Value='blue' )
AND
(Property_Name='Size' AND Property_Value='Large')
Run Code Online (Sandbox Code Playgroud)

谢谢 :)

编辑:忘记将预格式标签添加到示例表文本.刚刚这样做了.

Mar*_*zek 6

自我加入怎么样?

SELECT T1.ID
FROM PropertyTable T1
JOIN PropertyTable T2 ON T1.ID = T2.ID
WHERE
        T1.PropertyName = 'Color' AND T1.PropertyValue = 'Blue'
    AND
        T2.PropertyName = 'Size' AND T2.PropertyValue = 'Large'
Run Code Online (Sandbox Code Playgroud)

这是一个SQLFiddle

  • 我认为这是最简单的答案.@goparkyourcar:尽管如此,正如我之前的评论暗示的那样,我怀疑这不是存储和搜索数据的最佳方式.很可能很多这些"属性"可能/应该只是数据表中的列. (2认同)