我希望你能帮助我。我刚刚开始学习SQL,在工作中运用我的知识时,我陷入了困境。
我有多个表的SQL数据库,其中包含了待售物品属性的各种数据。到目前为止,我成功创建了一个查询,提取了所需的大部分信息。不幸的是,最后一张表对我来说成了问题。
表的格式如下:
| fkStockItemId | PropertyName | PropertyValue | PropertyType |
| ItemSKU-1 | Item Style | SB-01123 | Attribute |
| ItemSKU-1 | Item Size | X-Small | Attribute |
| ItemSKU-1 | Item Color | Red | Attribute |
| ItemSKU-2 | Item Style | AA-66002 | Attribute |
| ItemSKU-2 | Item Size | Medium | Attribute |
| ItemSKU-2 | Item Color | Green | Attribute |
| ItemSKU-3 | Item Style | 110445 | Attribute |
| ItemSKU-3 | Item Size | Small | Attribute |
我想要获得的输出是这样的:
| SKU | Item Style | Item Size | Item Color |
| ItemSKU-1 | SB-01123 | X-Small | Red |
| ItemSKU-2 | AA-66002 | Medium | Green |
| ItemSKU-3 | 110445 | Small | *Null* |
Please note that last column "PropertyType" is for technical purposes and
is not needed to be queried.
这是我到目前为止所得到的:
SELECT si.ItemNumber, si.ItemTitle, si.ItemDescription, si.RetailPrice, si.Weight, sl.Quantity, c.CategoryName, siep.ProperyValue, siep.ProperyName
FROM StockItem si
LEFT OUTER JOIN StockLevel sl ON si.pkStockItemID = sl.fkStockItemId
LEFT OUTER JOIN ProductCategories c ON si.CategoryId = c.CategoryId
LEFT OUTER JOIN StockItem_ExtendedProperties siep ON si.pkStockItemID = siep.fkStockItemId
WHERE siep.ProperyName = 'Item Style'
表" StockLevel"和" ProductCategories"显示结果就好了。如果您注意到,最后一次" StockItem_ExtendedProperties"加入和" siep.ProperyValue"," siep.ProperyName"加上" WHERE siep.ProperyName ='项目风格'"只允许我查询1个属性。感谢您的帮助和时间!
答案 0 :(得分:0)
将属性名称过滤器从WHERE子句移动到ON子句。然后再次加入每个属性:
SELECT si.ItemNumber, si.ItemTitle, si.ItemDescription, si.RetailPrice, si.Weight, sl.Quantity, c.CategoryName, style.ProperyValue as style, size.ProperyValue as size
FROM StockItem si
LEFT OUTER JOIN StockLevel sl ON si.pkStockItemID = sl.fkStockItemId
LEFT OUTER JOIN ProductCategories c ON si.CategoryId = c.CategoryId
LEFT OUTER JOIN StockItem_ExtendedProperties style ON si.pkStockItemID = style.fkStockItemId
AND style.ProperyName = 'Item Style'
LEFT OUTER JOIN StockItem_ExtendedProperties size ON si.pkStockItemID = size.fkStockItemId
AND size.ProperyName = 'Item Size'
答案 1 :(得分:0)
要获取类似列中的每个值,您可以先为每个属性编写一个子查询,然后将JOIN
一起编写,如下所示:
SELECT m1.fkStockItemId, m1.propertyValue AS 'Item Style', m2.propertyValue AS 'Item Size', m3.propertyValue AS 'Item Color'
FROM(
SELECT fkStockItemId, propertyValue
FROM myTable
WHERE propertyName = 'Item Style') m1
LEFT JOIN(
SELECT fkStockItemId, propertyValue
FROM myTable
WHERE propertyName = 'Item Size') m2 ON m2.fkStockItemId = m1.fkStockItemId
LEFT JOIN(
SELECT fkStockItemId, propertyValue
FROM myTable
WHERE propertyName = 'Item Color') m3 ON m3.fkStockItemId = m2.fkStockItemId;
以下是SQL Fiddle示例。
答案 2 :(得分:0)
我认为最好的方法是创建一个函数,它将返回您需要的属性值以及查询中包含的内容。
$('.foo')
.find('li')[0]
.css( "background-color", "yellow" );
上帝好运!