はい、あなたはこれを行うことができます。必要なコツは、テーブルサーバーからテーブルを取得する方法が2つあるという概念です。 1つの方法は..
FROM TABLE A
もう1つの方法は
ですFROM (SELECT col as name1, col2 as name2 FROM ...) B
select句とその周りの括弧はであることに注意してください。 テーブル、仮想テーブル。
したがって、2番目のコード例を使用します(ここで取得したい列を推測しています):
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)
実際のテーブルのattribute
に注意してください はこの結合の最初のテーブルであり、私がb
と呼んだこの仮想テーブルです。 2番目のテーブルです。
この手法は、仮想テーブルがある種のサマリーテーブルである場合に特に便利です。例:
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)
それがどうなるかわかりますか?仮想テーブルc
を生成しました 2つの列を含み、他の2つに結合し、ON
の列の1つを使用しました 句を入力し、もう一方を結果セットの列として返しました。