2011-01-15 3 views
1

私は2つのmysqlテーブルを持っています。文字列を含む1つのテーブル。たとえば、abc、def、ghi、jkl。もう一方のテーブルには、他のテーブルの文字列に関する情報が含まれています(たとえば、「アルファベットの最初の3文字」、「アルファベットの3-6文字」など)。この表の各文字列には複数(約25行)あります。MySQL - テーブル文字列でソートして制限する

は、私には、例えば、最初の1の各文字列のための第二のテーブルから3行を返すようにしたい:

table1.string | table2.info 
--------------------------- 
abc   | blahblah 
abc   | blahblah2 
def   | blahblah 
abc   | blahblah3 
def   | blahblah2 
def   | blahblah3 

私はforeachの操作を行うと、さらに多くのクエリを実行し、TABLE1最初から文字列を取得することができますテーブル2からリミット3を得る。しかし、それはパフォーマンスにとって良いとは思われません。

このようなクエリはどのように表示されますか?

+0

あなたはcreate table SQLを投稿できますか? – James

答えて

0

あなたはこの(それはしかし、非常に高速ではありません)してみてください、私はそれは、MySQLで動作するかどうか分かりませんが、MSSQLで、これは

 
SELECT 
    table1.string, 
    table2.info 
FROM table1 INNER JOIN table2 ON table2.stringID = table1.ID 
WHERE ROW_NUMBER() OVER (PARTITION BY table1.string ORDER BY table2.info) <= 3

0

次のようになります。

SELECT string,info FROM 
(
    select t1.string, t2.info, 
    @n_rec := IF(@tmp!=t1.string,1,@n_rec+1) as nrec, 
    @tmp := t1.string 
    FROM 
    table_1 t1 
    INNER JOIN table_2 t2 ON t2.table_1_id = t1.id 
    order by t1.string 
)yy 
INNER JOIN (SELECT @n_rec := 0) X 
INNER JOIN (SELECT @tmp:= null)Y 
WHERE nrec <=3; 

あなたが使用したいかもしれませんがtable_2の情報なしでtable_1のレコードを含める必要がある場合は、INNER JOIN table_2の代わりにLEFT JOIN table_2を使用してください。

関連する問題