我正在尝试编写一个从3个表中拉出来的SQL查询,并且无法实现我需要的结果。我想返回与特定类别配对的所有属性名称(标签),并将这些属性与来自该类别中特定资产的值配对,该值可能没有与每个属性配对的值。3表,SQL查询
我想所有的属性,类别4,与值配对的资产135。资产135没有财产3或4的设定值,所以我想:
| property_name | property_value |
|:--------------|:-------------------|
| Fixture ID | A5 |
| Manufacturer | Black & Decker |
| Model # | |
| Type | |
这里是我的查询:
SELECT property.property_name, asset_property.property_value
FROM property
LEFT OUTER JOIN category_property
ON property.property_id = category_property.property_id
INNER JOIN asset_property
ON asset_property.property_id = property.property_id
WHERE category_property.category_id = 4
AND asset_property.asset_id = 135
得到的数据:
| property_name | property_value |
|:--------------|:-------------------|
| Fixture ID | A5 |
| Manufacturer | Black & Decker |
这是因为我的缺失2属性AND asset_property.asset_id = 135
H是表表: *星号仅表示测试用例中的行。
表:财产
| property_id | property_name |
|:-----------:|:--------------|
| 1 | Fixture ID |*
| 2 | Manufacturer |*
| 3 | Model # |*
| 4 | Type |*
| 5 | Lamp Type |
表:asset_property
与属性值对资产。
| asset_id | property_id | property_value |
|:--------:|:-----------:|:---------------|
| 129 | 1 | A5 |
| 129 | 2 | Black & Decker |
| 129 | 3 | 1230-02 |
| 129 | 4 | Incandescent |
| 135 | 1 | E6 |*
| 135 | 2 | Linden |*
| 147 | 1 | G1 |
表:category_property
对类别与它的属性。
| category_id | property_id |
|:-----------:|:-----------:|
| 4 | 1 |*
| 4 | 2 |*
| 4 | 3 |*
| 4 | 4 |*
| 7 | 2 |
| 7 | 5 |
我试过所有不同的JOIN类型,HAVING,GROUP BY ....找不到它。如果有人明白我需要什么,我会非常感激帮助!谢谢!
为了澄清,我需要回到这些套的成绩:在property_id
| property_name |
|:--------------|
| Fixture ID |
| Manufacturer |
| Model # |
| Type |
和
| property_value |
|:---------------|
| A5 |
| Black & Decker |
加入他们的行列:
| property_name | property_value |
|:--------------|:---------------|
| Fixture ID | A5 |
| Manufacturer | Black & Decker |
| Model # |
| Type |
但由于没有记录4和5在asset_property table
中,这些属性的property_name
没有显示。
| property_name | property_value |
|:--------------|:---------------|
| Fixture ID | A5 |
| Manufacturer | Black & Decker |
型号
类型
我希望他们到E所示。我要全部类别4的产权名称将被退回并与资产135的任何匹配property_values配对。
所以对于水果类我希望所有的属性名称返回(颜色,季节,味道)。颜色属性苹果没有确定,但我还是想返回所有的属性类型,因此它们可以被改变或填写:
| property_name | property_value |
|:--------------|:---------------|
| Color | |
| Season | Fall |
| Taste | Tart |
你想要的结果是远离标准化表的一个支点。如果可以的话,考虑规范化你的模式,这使得查询更简单。这个模式看起来像Magento对我来说,你无法控制,但如果它是自定义的,你可以节省一些工作。 –