2

私はまだmySQLについて学んでいます(まだ基本的なクエリ、カウント、オーダーなどにしか慣れていません)。この質問は以前に尋ねられた可能性が非常に高いですが、何を検索すればよいかわからないか、初心者すぎて答えを理解できません。

私は2つのテーブルを持っています:

tb1 (a,b,path)
tb2 (a,b,value)

a、bがtb2の別のクエリと一致するtb1の各行の「パス」を返すクエリを作成したいと思います。悪い mysql では、次のようになります。

select
 path 
from tb1
 where
 a=(select a from tb2 where value < v1) 
and
 b=(select b from tb2 where value < v1); 

ただし、サブクエリが複数の値を返すため、これは機能しません。=によって返されない a,b 値の組み合わせに当てはまるため、による交換inは十分ではないことに注意してください。select a,b from tb2 where value < v1

基本的に、私は tb2 に基づいて (a,b) 空間内の興味深い領域を特定し、その領域内での tb1 の動作を研究したいと考えています (それがより明確になる場合)。

ありがとうございました :)

4

3 に答える 3

4

これはとの両方の仕事ですINNER JOINab

SELECT
  path
FROM 
   tb1
   INNER JOIN tb2 ON tb1.a = tb2.a AND tb1.b = tb2.b
/* add your condition to the WHERE clause */
WHERE tb2.value < v1

SELECTリストまたは句内のサブクエリのユースケースは、WHEREある種のを使用する代わりに、非常に頻繁に処理できJOINます。SELECTまたはWHEREサブクエリを使用する場合、返される行ごとに1回だけではなく、サブクエリを実行する必要がある場合があるため、結合はサブクエリよりも高速になることがよくあります。

JOIN上記のリンクに関するMySQLのドキュメントに加えて、JeffAtwoodによるSQLJOINの視覚的説明もお勧めします。

于 2012-05-31T12:38:29.810 に答える
1

INNERJOINがそのトリックを行います。

ON次のように、a値とb値の両方に一致させるには、2つの基準が必要です。

SELECT path
FROM tb1
INNER JOIN tb2 ON tb1.a = tb2.a AND tb1.b = tb2.b
WHERE tb2.value < v1

于 2012-05-31T12:37:35.303 に答える
0

次の方法で結果セットを制限できます。

select
 path 
from tb1
 where
 a=(select a from tb2 where value < v1 LIMIT 1) 
and
 b=(select b from tb2 where value < v1 LIMIT 1); 
于 2012-10-11T22:11:09.217 に答える