sql >> Database teknologi >  >> RDS >> Mysql

Wordnet-forespørgsel for at returnere eksempelsætninger

Du kan få sætningerne fra samples bord. F.eks.:

SELECT sample FROM samples WHERE synsetid = 201062889;

giver:

Så du kan udvide din forespørgsel som følger:

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;

Bemærk:Undervalget med en GROUP_CONCAT returnerer synonymerne for hver betydning som en kommasepareret liste i en enkelt række for at skære ned på antallet af rækker. Du kan overveje at returnere disse i en separat forespørgsel (eller som en del af denne forespørgsel, men med alt andet duplikeret), hvis det foretrækkes.

OPDATERING Hvis du virkelig har brug for synonymer som rækker i resultaterne, vil følgende gøre det, men jeg vil ikke anbefale det:Synonymer og eksempelsætninger vedrører begge en bestemt definition, så sættet af synonymer vil blive duplikeret for hver eksempelsætning. For eksempel. hvis der er 4 eksempelsætninger og 5 synonymer for en bestemt definition, ville resultaterne have 4 x 5 =20 rækker kun for denne definition.

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. Hvorfor returnerer MYSQL DB en beskadiget værdi, når der tages et gennemsnit over en Django models.DateTimeField?

  2. MySql LEFT JOIN med COUNT

  3. Liste over ikke-tomme tabeller i MySQL-databasen

  4. Brug af JDeveloper med MySQL-database og Oracle-database på AWS RDS, del 3