Ya, Anda bisa melakukan ini. Bakat yang Anda butuhkan adalah konsep bahwa ada dua cara untuk mengeluarkan tabel dari server tabel. Salah satu caranya adalah ..
FROM TABLE A
Cara lainnya adalah
FROM (SELECT col as name1, col2 as name2 FROM ...) B
Perhatikan bahwa klausa pilih dan tanda kurung di sekitarnya adalah meja, meja virtual.
Jadi, dengan menggunakan contoh kode kedua Anda (saya menebak kolom yang ingin Anda ambil di sini):
SELECT a.attr, b.id, b.trans, b.lang
FROM attribute a
JOIN (
SELECT at.id AS id, at.translation AS trans, at.language AS lang, a.attribute
FROM attributeTranslation at
) b ON (a.id = b.attribute AND b.lang = 1)
Perhatikan bahwa attribute
tabel asli Anda adalah tabel pertama dalam gabungan ini, dan tabel virtual ini saya sebut b
adalah tabel kedua.
Teknik ini sangat berguna ketika tabel virtual adalah tabel ringkasan dari beberapa jenis. misalnya
SELECT a.attr, b.id, b.trans, b.lang, c.langcount
FROM attribute a
JOIN (
SELECT at.id AS id, at.translation AS trans, at.language AS lang, at.attribute
FROM attributeTranslation at
) b ON (a.id = b.attribute AND b.lang = 1)
JOIN (
SELECT count(*) AS langcount, at.attribute
FROM attributeTranslation at
GROUP BY at.attribute
) c ON (a.id = c.attribute)
Lihat bagaimana kelanjutannya? Anda telah membuat tabel virtual c
berisi dua kolom, digabungkan dengan dua kolom lainnya, menggunakan salah satu kolom untuk ON
klausa, dan mengembalikan yang lain sebagai kolom di kumpulan hasil Anda.