[英]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
兩個a
和b
:
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
子查詢時,可能需要為返回的每一行執行子查詢,而不是只執行一次,因此聯接通常會比子查詢快。
除了上面鏈接的關於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.