2011-01-24 4 views
1

私はこのクエリを持っていますが、usernameonline_users dbに存在する場合にのみ、その情報が必要です。それは次のようになります。私は私のonline_usersデシベルで3人のユーザーがいる場合値が別のdbに存在する場合、1つのmysql dbから情報を選択

id bigint(20)   
username varchar(16) 
ip varchar(39) 
time datetime 

だから、私はそれらの3人のユーザーからの私のusersテーブルからlatitude, longitude, username and rankをしたいです。これはどうすればいいですか?私はUNIONと思っていますが、私のSQLスキルは限られています。

+0

あなたは、データベースとテーブルのアイデアを混乱させていますか? –

+0

はい、申し訳ありません。 – ganjan

答えて

0

これらは同じデータベース内の2つのテーブルではなく、2つのデータベースは(述べたように)していると仮定すると、以下のいずれかが動作します:

SELECT latitude, longitude, username, rank 
    FROM users INNER JOIN online_users ON users.username = online_users.username 

SELECT latitude, longitude, username, rank 
    FROM users WHERE username IN (SELECT username FROM online_users) 
+0

EXISTSも機能しますが、JOINはおそらく3つのオプションの中で最高のパフォーマンスです。 –

+0

私はEXISTSオプションを宣伝するつもりでしたが、通常、複数の列をテストし、複数の行が一致する場合に備えて予約します。私は "きれいな" INで考えるが、それは純粋に私がそれを使って "育った"ためである。私は、特定のINサブクエリでMySQLにパフォーマンスの問題があることを知っています。 –

0

あなたが別の表の関係でレコードのみを取得していることを確認するために、むしろUNIONよりも、内部結合を使用したい:

SELECT u.latitude, u.longitude, u.username, u.rank 
    FROM USERS u 
    JOIN ONLINE_USERS ou ON ou.username = u.username 

これはgood introduction to joinsです。

表が同じMySQLインスタンス上の異なるデータベースにある場合は、それぞれのデータベースとテーブルの参照接頭辞:クエリを実行しているユーザーがテーブルにアクセスする必要があります

SELECT u.latitude, u.longitude, u.username, u.rank 
    FROM DB1.USERS u 
    JOIN DB2.ONLINE_USERS ou ON ou.username = u.username 

を。