sql >> データベース >  >> RDS >> Mysql

Sphinx / MySQLを使用して2つのテーブルから一度にデータを取得するためのより良い方法はありますか?

    2つのMySQLクエリがないことで本当に逃げることはできません。どちらかを組み合わせて、UNIONを使用することもできます。または、新しい結合された「テーブル」(ビューまたはマテリアライズド・ビューのいずれか)を作成することによって-しかし、実際には努力する価値があるとは思わないでください。 2つのクエリは完全に問題ありません-あなたが言うように、それらは索引付けされています。

    新しい結合インデックスを作成することで、1つのスフィンクスインデックス(したがって1つの検索クエリ)を使用できます。キーは一意ではないと言うので、新しい合成キーを作成する必要があります。

    例...

    sql_query = SELECT userid*2 AS id, 1 AS table_id, firstname AS one, lastname as two FROM tellycards_user_data \
                  UNION \
                SELECT (id*2)+1 as id, 2 AS table_id, name AS one, screenshot AS two FROM tellycards_ripples
    sql_attr_unit = table_id
    

    これにより、偽のキーと、結果がどのテーブルからのものであるかを識別する属性が提供されます。これを使用して、元のテーブルを取得できます。 (同じことをする方法は他にもたくさんあります)

    これにより、1つのクエリを実行し、組み合わせた結果を得ることができます。

    ...しかし、その良い考えを確信していません。結果が非対称である場合、結果を見逃す可能性があるためです。 1つのテーブルから20の一致する結果があり、別のテーブルから10の一致する結果があるとします。上位10件の結果を表示するとします。これは、制限があるため、2番目のテーブルの結果が最初のテーブルの下に隠れている可能性があります(極端な例では、実際には、それらが混ざっていることを願っています)。 2つの個別のクエリにより、各テーブルからいくつかの結果を取得することが保証されます。

    ...結局のところ。あなたが得たものに固執する。大丈夫だよ。



    1. 名前がJPAの予約語であるエンティティフィールドをマップする方法

    2. Python SQLAlchemyクエリ:AttributeError:'接続'オブジェクトに属性がありません'contextual_connect'

    3. カーソルを使用せずにSQLで現在の合計を計算するにはどうすればよいですか?

    4. MySQLでのトランザクションの処理