2012-01-16 3 views
0

で2つのクエリをマージ:私は歴史をダウンロードすべてのユーザーのビデオを含む表を持っているMySQLの

src_ip vlan_id video_id area date_pl 
aaaa  A  1  123 xxxx-xx-xx 
aaaa  A  2  123 xxxx-xx-xx 
aaaa  B  1  456 xxxx-xx-xx 
bbbb  A  4  123 xxxx-xx-xx 
bbbb  C  6  567 xxxx-xx-xx 
... 

私は今、私はランダムに50人の異なるユーザーを選択したい、異なるユーザを識別するためにsrc_ipに及びVLAN_IDの組み合わせを使用(src_ipとvlan_idの50個の異なる組み合わせを意味します)、すべてのダウンロード履歴を一覧表示します。

だから、最初に私がやった:

SELECT distinct src_ip, vlan_id from video_2 as table2 
    WHERE date_pl >= '2011-11-29 00:00' AND date_pl <= '2011-12-05 23:55' order by rand() limit 50 

をそれから私はやった:

SELECT src_ip, vlan_id, video_id, area from video_2 
    where video_2.src_ip = table2.src_ip AND video_2.vlan_id = table2.vlan_id 
    AND date_pl >= '2011-11-29 00:00' AND date_pl <= '2011-12-05 23:55' 

しかし、問題は、彼らは二つの独立したクエリが2番目のクエリでは、それは知りません、なので、何ですかtable2はです。

この問題を解決するにはどうすればよいですか、またはこの2つのクエリを1つにマージする方法はありますか?

答えて

2
CREATE TEMPORARY TABLE table2 
AS 
SELECT distinct src_ip, vlan_id from video_2 
WHERE date_pl >= '2011-11-29 00:00' AND date_pl <= '2011-12-05 23:55' 
ORDER BY rand() 
LIMIT 50; 

SELECT src_ip, vlan_id, video_id, area 
FROM 
    video_2 
    JOIN 
    table2 ON video_2.src_ip = table2.src_ip AND video_2.vlan_id = table2.vlan_id'; 

あなたは が原因サブクエリでLIMITの使用制限のライン に由来する「table2のを」しない ことができます。それ以外の場合は

SELECT 
    v2.src_ip, v2.vlan_id, v2.video_id, v2.area 
FROM 
    video_2 v2 
    JOIN 
    (SELECT distinct v.src_ip, v.vlan_id from video_2 v 
    WHERE v.date_pl >= '2011-11-29 00:00' AND v.date_pl <= '2011-12-05 23:55' 
    ORDER BY rand() 
    LIMIT 50 
    ) table2 ON v2.src_ip = table2.src_ip AND v2.vlan_id = table2.vlan_id; 

編集だろう:追加もっと別名

+0

2番目のクエリは、MySQLで正常に動作します:サブクエリでの制限の上限は、INほとんどが、派生していないテーブル

編集2に適用されます。 'LIMIT'は' IN/ALL/ANY/SOME'サブクエリでは許されません。これは、例として使用される導出テーブルで許可されます。 –

+0

@ypercube:ああ、INでそれを見ました:http://dev.mysql.com/doc/refman/5.5/en/subquery-errors.html – gbn

+0

@gbnあなたの返事に感謝します。 2番目のクエリを使用しましたが、ここで別のエラーが発生しました。フィールドリストのsrc_ip 'があいまいです。この問題を解決するための提案はありますか? – manxing