我有一张资产表:
id | name | cateogoryid
----+-----------+-------------
1 | Asset One | 1
2 | Asset Two | 2
然后我有一个类别属性表(该类别中资产显示的可能属性)
id | name | cateogoryid
----+-----------------+-------------
1 | Attribute One | 1
2 | Attribute Two | 1
3 | Attribute Three | 1
4 | Attribute One | 2
5 | Attribute Two | 2
最后,我有一个表格,它将资产与属性相关联(显示哪些资产展示了哪些属性)
id | assetid | attributeid
----+---------+-------------
1 | 1 | 1
2 | 1 | 3
3 | 2 | 5
我想将此数据转换为一个表格,该表格显示每个资产的每个属性的真/假值:
asset | attribute | result
-----------+-----------------+--------
Asset One | Attribute One | true
Asset One | Attribute Two | false
Asset One | Attribute Three | true
Asset Two | Attribute One | false
Asset Two | Attribute Two | true
我对此做了一些研究,但很难找到任何相关的例子,因为我并不知道该搜索什么。
非常感谢。
答案 0 :(得分:0)
我还没有对查询进行过测试,但这样的事情会让你开始......
SELECT asset.name,
attribute.name,
CASE WHEN asset_attribute.Id IS NOT NULL THEN 'true' else 'false' END AS result
FROM asset
CROSS JOIN attribute
LEFT JOIN asset_attribute
ON asset.id = asset_attribute.assetid
WHERE asset.categoryId = attribute.categoryId
答案 1 :(得分:0)
您可能想尝试一下:
SELECT
Asset.name asset
, Attribute.name attribute
, CASE WHEN (SELECT id FROM Asset_Attribute WHERE Asset_Attribute.assetID = Asset.id AND Asset_Attribute.attributeID = Attribute.id) IS NULL THEN 'FALSE' ELSE 'TRUE' END result
FROM Asset
INNER JOIN Attribute
ON Asset.categoryID = Attribute.categoryID
ORDER BY Asset.id, Attribute.id;
查看实际操作:SQL Fiddle
但是,我承认,我并没有完全遵循你的设置。但这可能是由于所提供的只是更大背景的一部分。