PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

Pg . में एक दूसरे से सटे दो शब्दों वाले वाक्य खोजें

आसान समाधान, लेकिन केवल तभी परिणाम देता है, जब item.position . में कोई अंतराल न हो रों:

SELECT DISTINCT sentence.sentenceid 
  FROM sentence 
  JOIN item ON sentence.sentenceid = item.sentenceid
  JOIN word ON item.wordid = word.wordid
  JOIN item AS next_item ON sentence.sentenceid = next_item.sentenceid
                        AND next_item.position = item.position + 1
  JOIN word AS next_word ON next_item.wordid = next_word.wordid
 WHERE word.spelling = 'word1'
   AND next_word.spelling = 'word2'

विंडो फ़ंक्शंस का उपयोग करके अधिक सामान्य समाधान :

SELECT DISTINCT sentenceid
FROM (SELECT sentence.sentenceid,
             word.spelling,
             lead(word.spelling) OVER (PARTITION BY sentence.sentenceid
                                           ORDER BY item.position)
        FROM sentence 
        JOIN item ON sentence.sentenceid = item.sentenceid
        JOIN word ON item.wordid = word.wordid) AS pairs
 WHERE spelling = 'word1'
   AND lead = 'word2'

संपादित करें :इसके अलावा सामान्य समाधान (अंतराल की अनुमति है), लेकिन केवल जुड़ने के साथ:

SELECT DISTINCT sentence.sentenceid
  FROM sentence 
  JOIN item ON sentence.sentenceid = item.sentenceid
  JOIN word ON item.wordid = word.wordid
  JOIN item AS next_item ON sentence.sentenceid = next_item.sentenceid
                        AND next_item.position > item.position
  JOIN word AS next_word ON next_item.wordid = next_word.wordid
  LEFT JOIN item AS mediate_word ON sentence.sentenceid = mediate_word.sentenceid
                                AND mediate_word.position > item.position
                                AND mediate_word.position < next_item.position
 WHERE mediate_word.wordid IS NULL
   AND word.spelling = 'word1'
   AND next_word.spelling = 'word2'


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL का उपयोग करके मूडल के लिए अत्यधिक उपलब्ध डेटाबेस बनाना

  2. समानांतरवाद VACUUM . में आता है

  3. नाम से पोस्टग्रेज टेबल को कैसे इंडेक्स करें, जब नाम किसी भी भाषा में हो सकता है?

  4. UTF8 एन्कोडिंग के लिए अमान्य बाइट अनुक्रम

  5. डेटाबेस में dplyr के साथ तालिका लिखें