Puoi ottenere le frasi dai samples
tavolo. Es.:
SELECT sample FROM samples WHERE synsetid = 201062889;
rendimenti:
Quindi potresti estendere la tua query come segue:
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;
Nota:la sottoselezione con un GROUP_CONCAT
restituisce i sinonimi di ogni senso come un elenco separato da virgole in una singola riga per ridurre il numero di righe. Potresti considerare di restituirli in una query separata (o come parte di questa query ma con tutto il resto duplicato), se preferisci.
AGGIORNAMENTO Se hai davvero bisogno di sinonimi come righe nei risultati, quanto segue lo farà ma non lo consiglierei:i sinonimi e le frasi di esempio riguardano entrambi una definizione particolare, quindi l'insieme di sinonimi verrà duplicato per ogni frase di esempio. Per esempio. se ci sono 4 frasi di esempio e 5 sinonimi per una definizione particolare, i risultati avrebbero 4 x 5 =20 righe solo per quella definizione.
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;