/ / EAVデータベースのクエリで生成される「null」が多すぎる-mysql、sql、データベース、集約、エンティティ属性値

mysql、sql、database、aggregate、entity-attribute-valueのEAVデータベースのクエリが多すぎる "null"を生成する

私は数日間、上記のEntity-Attribute-Valueデータベースに対するクエリであり、SQLで少し錆びているので、多くの調査を行った後でも、クエリを思い通りに実行することができません。

テーブルの重要な部分は次のようになります。

ID |コンセプト|修飾子 1 | abc:10 | @ 2 | abc:22 | @ 2 | abc:22 | t:f 2 | abc:78 | @ 2 | abc:78 | t:x 3 | kfg:12 | @ 4 | aqx:23 | @ 5 | abc:49 | @ 5 | abc:49 | t:f 5 | abc:49 | t:g

私はこのようなテーブルが欲しい:

ID |コンセプト| mod_f | mod_other 1 | abc:10 | null |ヌル 2 | abc:22 | t:f |ヌル 2 | abc:78 | null | t:x 5 | abc:49 | t:f | t:g

私の試みはすでにこの結果に私を導いてくれました:

ID |コンセプト| mod_f | mod_other 1 | abc:10 | null |ヌル 2 | abc:22 | t:f |ヌル 2 | abc:22 | null |ヌル 2 | abc:78 | null | t:x 2 | abc:78 | null |ヌル 5 | abc:49 | t:f |ヌル 5 | abc:49 | t:f | t:g 5 | abc:49 | null | t:g 5 | abc:49 | null |ヌル

これが私の結果を生み出したコードです:

SELECT t.ID、t.concept、t.modifier、 場合t。concept LIKE "abc:%" and t.modifier = "@" then t.concept end AS "concept"、 t2.modifier = "t:f"の場合、t2.modifier end AS "mod_f"の場合、 t3.modifier LIKE "t:%"の場合、t3.modifier end AS "mod_other"の場合 FROMテーブル LEFT JOINテーブルをt2 ON t.ID = t2.IDおよびt.concept = t2.conceptとして LEFT JOINテーブルをt3 ON t2.ID = t3.IDおよびt2.concept = t3.conceptとして WHERE t.concept LIKE "abc:%"およびt.modifier = "@"および (t2.modifier LIKE "t:f"またはt2.modifier = "@")および (t3.modifier = "t:g"またはt3.modifier = "t:x"またはt3.modifier = "@")
ORDER BY t.ID asc;

修正はちょっと簡単に見えますが、私が持っているものは何でも試してみた結果、必要な数よりも少なくなり(基本的に削除する行が多すぎる)、この時点では、何を検索する必要があるのか​​わかりません。

また、クエリの「ケース」の部分は一種のように見えますダーティソリューション。どこかで見つけて機能するため( "@"を "null"にするため)使用するため、クエリをよりクリーンにするための提案があれば、遠慮なく返信してください。

回答:

回答№1は0

さて、私は答えを見つけました、そしてそれは思ったより簡単でした。

GROUP byが答えです。これはテキストでは機能しないと思いましたが、実際には次のコマンドでテキストケースのselectステートメントを集約できます。 最大 このような:

SELECT t.ID、t.concept、t。修飾子、 max(t.concept LIKE "abc:%"およびt.modifier = "@"の場合の場合、t.concept end)AS "concept"、 max(t2.modifier = "t:f"の場合はt2.modifier endの場合)AS "mod_f"、 max(t3.modifier LIKE "t:%"、t3.modifier endの場合)AS "mod_other" FROMテーブル LEFT JOINテーブルをt2 ON t.ID = t2.IDおよびt.concept = t2.conceptとして LEFT JOINテーブルをt3 ON t2.ID = t3.IDおよびt2.concept = t3.conceptとして WHERE t.concept LIKE "abc:%"およびt.modifier = "@"および (t2.modifier LIKE "t:f"またはt2.modifier = "@")および (t3.modifier = "t:g"またはt3.modifier = "t:x"またはt3.modifier = "@") GROUP by t.ID、t.concept、t.modifier ORDER BY t.ID asc;

これにより、探していたテーブルを正確に入手できます。しかし、これはうまくいきません mod_other コンセプトごとに1つのコードのみを含めることができます。