Et billede har tilknyttet nogle emneord (ses via emnebillede relationen). Disse emneord har hvert et emneordId. Emnebillede relationen fortæller altså hvilke emneord et billede har.
Rent logisk vil vi nu gerne have en SQL-sætning der ser sådan ud:
SELECT titel FROM (select???)R1, billede, emnebillede WHERE JOIN ord like \'skov\' AND ord like \'jagt\' OR ord like \'hest\' AND NOT ord like \'hingst\'
men, men, men hvordan gøres det rent praktisk i Oracle.
SELECT b.titel FROM billede b, emnebillede eb, emneord eo WHERE eo.ord IN (\'skov\', \'jagt\', \'hest\') -- or whatever AND eb.id =b.id AND eb.emneordID=eo.emneordID /
Så er det nok fordi jeg ikke forstår, hvad I ønsker - for et ord kan vel ikke være \'skov\' og \'jagt\' samtidig?
Måske skal udtrykket se således ud:
(eo.ord LIKE \'skov%\' OR eo.ord LIKE \'jagt%\' OR eo.ord LIKE \'hest%\') AND (eo.ord NOT LIKE \'hingst%\')
hvor % er et wildcardtegn. Hvis ikke I har brug for wildcards i sammenligningen, kan I anvender lig med (=) i stedet for LIKE - men så har AND NOT delen vist ingen betydning.
Så er det nok snarere et select som dette, I har brug for:
SELECT b.titel FROM billede b, ( SELECT eb1.bid FROM emnebillede eb1, emnebillede eb2, emneord eo1, emneord eo2 WHERE eb1.bid=eb2.bid AND eb1.eid=eb1.eid AND eb2.eid=eb2.eid AND eo1.ord=\'skov\' AND eo2.ord=\'jagt\' UNION SELECT eb3.bid FROM emnebillede eb3, emneord eo3 WHERE eb3.eid=eo3.eid AND eo3.ord=\'hest\' MINUS SELECT eb4.bid FROM emnebillede eb4, emneord eo4 WHERE eb4.eid=eo4.eid AND eo4.ord=\'hingst\' ) udvalgte WHERE b.bid=udvalgte.bid;
Du har nu løst flere dages kamp mod denne problemstilling. Tusind tak, det var helt fantastisk.
Hav en god dag.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.