簡體   English   中英

如何從不相關的表中合並為僅 1 行的 2 個查詢結果

[英]How to combine to 2 query results of only 1 row from unrelated tables

我有以下表格:

   Table A            Table B
 -------------     -------------
| nameA| numA |   | nameB| numB |
|-------------|   |-------------|
|  A   |   3  |   |  z   |   1  |
|------+------|   |------+------|
|  C   |   9  |   |  w   |   5  |
|------+------|   |------+------|
|  D   |   7  |   |  y   |   3  |
|------+------|   |------+------|
|  B   |   2  |   |  x   |   9  |
|------+------|   |------+------|

我想獲取兩個表的名稱列,其中 num 列中的數字最接近某個數字,而無需遍歷

我可以輕松地為此獨立創建查詢,但我不知道如何加入結果。

例如,如果我想要 nameA 其中 numA 最接近 5 而不經過,而 nameB 中 numB 最接近 4 而不經過,我將有以下 2 個查詢

SELECT nameA FROM TableA WHERE numA < 5 ORDER BY numA LIMIT 1

SELECT nameB FROM TableB WHERE numB < 4 ORDER BY numB LIMIT 1

我想要的結果表是

 ---------------
| nameA | nameB |
|---------------|
|   A   |   y   |
 ---------------

請注意,TableA 大約有 100,000 行,TableB 大約有 1,000,000 行。

一種方法只是在兩個查詢之前添加select

select (select a.name
        from a
        where a.numA < 5
        order by a.numA desc
        fetch first 1 row only
       ) a_name,
       (select b.name
        from b
        where b.numB < 5
        order by b.numB desc
        fetch first 1 row only
       ) b_name;

或者把它放在FROM子句中並使用CROSS JOIN

select a.*, b.*
from (select a.name
      from a
      where a.numA < 5
      order by a.numA desc
      fetch first 1 row only
     ) a CROSS JOIN
     (select b.name
      from b
      where b.numB < 5
      order by b.numB desc
      fetch first 1 row only
     ) b

嘗試這個:

select nameA, nameB
from TableA, TableB
where numA<5
and numB<4 
order by numA desc, numB desc 
fetch first 1 row only;

或者如果您想使用較新的“加入”符號:

select nameA, nameB
from TableA
join TableB
on numA<5
where numB<4 
order by numA desc, numB desc 
fetch first 1 row only;

結果:

nameA  nameB
  a      y

暫無
暫無

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

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