這是一個Entity-Attribute-Value表,並且它非常痛苦地搜索。 (在這種情況下,value
暗示爲TRUE
爲has this attribute
。)
這涉及比較反對一切的一切,分組結果,並檢查是否羣組符合。幾乎不使用任何類型的索引或智能。
SELECT
material_a.material AS material_a,
material_b.material AS material_b
FROM
material AS material_a
LEFT JOIN
material AS material_b
ON material_a.character = material_b.character
AND material_a.material <> material_b.material
GROUP BY
material_a.material,
material_b.material
HAVING
0 = MAX(CASE WHEN material_b.character IS NULL THEN 1 ELSE 0 END)
這使每一個有該material_a具有的特點所有 material_b。
- HAVING子句將檢查材料b的每個0
材料a的特性是否缺失。
更改爲INNER JOIN
並更改HAVING CLAUSE
將獲得share at least two materials
。
SELECT
material_a.material AS material_a,
material_b.material AS material_b
FROM
material AS material_a
INNER JOIN
material AS material_b
ON material_a.character = material_b.character
AND material_a.material <> material_b.material
GROUP BY
material_a.material,
material_b.material
HAVING
COUNT(*) >= 2
無論哪種方式,你仍然是對整個表加入整個表,然後濾出故障。用100種材料,即9,900種材料比較。想象一下,當你有1000個材料,並有999,000比較。或1百萬材料...
所以你給一個特定的材料作爲輸入?或者您想要歸還具有共同特徵的所有材料對?你也嘗試過什麼嗎? – OGHaza
SELECT x.m FROM x JOIN y ON y.m <> x.m AND y.c = x.c WHERE y.m = z GROUP BY x.m HAVING COUNT(*)> = 2 – Strawberry