繁体   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