Mysql
 sql >> база данни >  >> RDS >> Mysql

Wordnet заявка за връщане на примерни изречения

Можете да получите изреченията от samples маса. Напр.:

SELECT sample FROM samples WHERE synsetid = 201062889;

дава:

Така че можете да разширите заявката си по следния начин:

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;

Забележка:Подизборът с GROUP_CONCAT връща синонимите на всяко значение като списък, разделен със запетая, в един ред, за да намали броя на редовете. Можете да обмислите връщането им в отделна заявка (или като част от тази заявка, но с всичко останало дублирано), ако предпочитате.

АКТУАЛИЗАЦИЯ Ако наистина се нуждаете от синоними като редове в резултатите, следното ще го направи, но не бих го препоръчал:Синонимите и примерните изречения се отнасят към конкретна дефиниция, така че наборът от синоними ще бъде дублиран за всяко примерно изречение. напр. ако има 4 примерни изречения и 5 синонима за конкретно определение, резултатите ще имат 4 x 5 =20 реда само за това определение.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 1130 Хостът 'amazon-ec2-ip' няма право да се свързва с този MySQL сървър

  2. MYSQL LEFT JOIN с GROUP BY

  3. Грешка в резултата на UDF

  4. как бързо да копирате голяма таблица innodb

  5. MySQL:Получаване на начална и крайна времева марка за всеки ден