簡體   English   中英

匹配多列到多行子查詢?

[英]match multiple columns to multiple-row subquery?

我仍在學習有關mySQL的知識(實際上我仍然只能接受基本查詢,計數,排序等)。 這個問題很可能已經被問過了,但是我不知道要搜索什么,或者我對於一個新手來說太了解了答案:

我有兩個表:

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

我想對a,b與tb2上的不同查詢匹配的tb1中的每一行返回“ path”的查詢。 在糟糕的mysql中,它將類似於:

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

但是,這不起作用,因為子查詢返回多個值。 請注意,通過in交換= by還不夠好,因為對於a,b值的組合( select a,b from tb2 where value < v1未返回)是不select a,b from tb2 where value < v1

基本上,我已經基於tb2在(a,b)空間中確定了一個有趣的區域,並想研究tb1在該區域內的行為(如果可以更清楚地了解)。

謝謝 :)

這是一個工作一個INNER JOIN兩個ab

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進行處理。 由於使用SELECTWHERE子查詢時,可能需要為返回的每一行執行子查詢,而不是只執行一次,因此聯接通常會比子查詢快。

除了上面鏈接的關於JOIN的MySQL文檔之外,我還建議Jeff Atwood的SQL JOIN的可視化解釋。

INNER JOIN將解決問題。

您只需要兩個ON條件即可同時匹配a和b值,如下所示:

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

您可以通過以下方式限制結果集:

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); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM