sql >> Databasteknik >  >> RDS >> Mysql

Wordnet-fråga för att returnera exempelmeningar

Du kan hämta meningarna från samples tabell. T.ex.:

SELECT sample FROM samples WHERE synsetid = 201062889;

ger:

Så du kan utöka din fråga enligt följande:

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;

Obs:Undervalet med en GROUP_CONCAT returnerar synonymerna för varje betydelse som en kommaseparerad lista i en enda rad för att minska antalet rader. Du kan överväga att returnera dessa i en separat fråga (eller som en del av den här frågan men med allt annat duplicerat) om så önskas.

UPPDATERA Om du verkligen behöver synonymer som rader i resultaten, kommer följande att göra det men jag skulle inte rekommendera det:Synonymer och exempelmeningar hänför sig båda till en viss definition så uppsättningen synonymer kommer att dupliceras för varje exempelmening. T.ex. om det finns 4 exempelmeningar och 5 synonymer för en viss definition, skulle resultaten ha 4 x 5 =20 rader bara för den definitionen.

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. Mikro-orm-fel:lösenordsautentisering misslyckades för användare postgres

  2. Varför avråds mysql_connect och vilka är alternativen?

  3. Postgres SQL för att fråga arraytext[] i ett specifikt element

  4. Inga data extraherades från MySQL-databasen när jag kör min JSP-sida