[英]mysql query on database using composite design pattern
我不是SQL專家,因此在設計mysql查詢以查詢使用“復合設計模式”設計的數據庫表時遇到麻煩。
這些表是:
復合材料:id,名稱,類型[類型為“條件”或“條件組”]
Composites_properties:id,composite_id,property_id
分組:id,parent_id,child_id
屬性:id,鍵,值
我想做的是生成一個查詢,該查詢將返回組(“ ConditionGroup”)成員條件(“ Condition”)的唯一屬性,這樣我最終得到一個組名和一個屬性鍵列表(從成員繼承)條件)。
我想出的最好的是:
SELECT DISTINCT properties.`key`, composites.name
FROM composites, composites_properties, properties
WHERE composites.id=composites_properties.composite_id
AND properties.id=composites_properties.property_id
AND composites.id IN (
SELECT child_id FROM groupings WHERE parent_id IN
(SELECT id FROM composites WHERE type='ConditionGroup')
)
這將產生每個成員條件及其屬性列表,如果一個以上成員條件具有該屬性,則重復該屬性。
最后,我想:
組名
property_1
property_2
property_3
但是我得到以下類型列表(沒有指示條件屬於哪個組)
條件名稱1 property_1
條件名稱1 property_2
條件名稱1 property_3
條件名稱2 property_1
條件名稱2 property_2
條件名稱3 property_1
條件名稱3 property_2
有什么建議么?
老實說,我不清楚您要完成的目標,但我會給您一個機會。 如果您可以弄清楚該查詢無法滿足您的要求,那么我可能會進一步提供幫助。
SELECT c.name, p.key
FROM composites c
INNER JOIN groupings g ON c.id = g.parent_id
INNER JOIN composites_properties cp ON cp.composite_id = g.child_id
INNER JOIN properties p ON p.id = cp.property_id
WHERE c.type = 'ConditionGroup'
對我來說,這似乎不是世界上最好的查詢,因為它忽略了每個分組中的子代實際是什么,因此我不確定這是您想要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.