sql >> Databáze >  >> RDS >> Mysql

Dotaz aplikace Wordnet pro vrácení příkladů vět

Věty můžete získat z samples stůl. Např.:

SELECT sample FROM samples WHERE synsetid = 201062889;

výnosy:

Svůj dotaz tedy můžete rozšířit následovně:

SELECT 
    a.lemma AS `word`,
    c.definition,
    c.pos AS `part of speech`,
    d.sample AS `example sentence`,
    (SELECT 
            GROUP_CONCAT(a1.lemma)
        FROM
            words a1
                INNER JOIN
            senses b1 ON a1.wordid = b1.wordid
        WHERE
            b1.synsetid = b.synsetid
                AND a1.lemma <> a.lemma
        GROUP BY b.synsetid) AS `synonyms`
FROM
    words a
        INNER JOIN
    senses b ON a.wordid = b.wordid
        INNER JOIN
    synsets c ON b.synsetid = c.synsetid
        INNER JOIN
    samples d ON b.synsetid = d.synsetid
WHERE
    a.lemma = 'carry'
ORDER BY a.lemma , c.definition , d.sample;

Poznámka:Podvýběr s GROUP_CONCAT vrátí synonyma každého smyslu jako seznam oddělený čárkami v jednom řádku, aby se snížil počet řádků. Pokud dáváte přednost, můžete zvážit jejich vrácení v samostatném dotazu (nebo jako součást tohoto dotazu, ale se vším ostatním duplicitním).

AKTUALIZACE Pokud opravdu potřebujete synonyma jako řádky ve výsledcích, udělá to následující, ale nedoporučoval bych to:Synonyma i příkladové věty se vztahují ke konkrétní definici, takže sada synonym bude pro každou ukázkovou větu duplikována. Např. pokud existují 4 vzorové věty a 5 synonym pro konkrétní definici, výsledky by měly 4 x 5 =20 řádků jen pro tuto definici.

SELECT 
    a.lemma AS `word`,
    c.definition,
    c.pos AS `part of speech`,
    d.sample AS `example sentence`,
    subq.lemma AS `synonym`
FROM
    words a
        INNER JOIN
    senses b ON a.wordid = b.wordid
        INNER JOIN
    synsets c ON b.synsetid = c.synsetid
        INNER JOIN
    samples d ON b.synsetid = d.synsetid
        LEFT JOIN
    (SELECT 
        a1.lemma, b1.synsetid
    FROM
        senses b1
    INNER JOIN words a1 ON a1.wordid = b1.wordid) subq ON subq.synsetid = b.synsetid
        AND subq.lemma <> a.lemma
WHERE
    a.lemma = 'carry'
ORDER BY a.lemma , c.definition , d.sample;



  1. Závažná chyba:Nelze otevřít a zamknout tabulky oprávnění:Tabulka 'mysql.host' neexistuje

  2. Ověřuje MySQLi standardně certifikáty serveru při použití SSL?

  3. Získání ORA-01031:nedostatečná oprávnění při dotazování na tabulku místo ORA-00942:tabulka nebo pohled neexistuje

  4. Vypršel časový limit připojení/dotazu Oracle