[英]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.