Anda dapat menambahkan kolom, mis. word_length yang berisi panjang kata, dan tambahkan indeks pada word_length kolom. Biasanya akan menjadi desain yang buruk untuk memasukkan data yang dapat diturunkan dari kolom lain, tetapi dalam hal ini Anda perlu merusak kemurnian demi kinerja. Kemudian kueri Anda dapat menggunakan JOIN kondisi menggunakan kolom ini:
SELECT CONCAT(w1.my_word, w2.my_word) joined
FROM my_words w1
JOIN my_words w2 ON w1.word_length = 8 - w2.word_length
WHERE w2.word_length < 8
ORDER BY RAND()
LIMIT 5
Anda dapat menggunakan INSERT dan UPDATE pemicu untuk mengisi word_length kolom secara otomatis.
Mungkin juga berguna untuk melakukan penggabungan setelah memfilter ke 5 baris:
SELECT CONCAT(word1, word2) joined
FROM (
SELECT w1.my_word word1, w2.my_word word2
FROM my_words w1
JOIN my_words w2 ON w1.word_length = 8 - w2.word_length
WHERE w2.word_length < 8
ORDER BY RAND()
LIMIT 5) x