在联合子查询中使用列以上 2 级
Using 2 levels avobe column in union subquery
我有一个非常复杂的查询,它涉及一个子查询,这个子查询用作联合 table。我想使用第一级的列(子查询之前的字段)作为联合中 where 子句的一部分。像这样:
SELECT
type,
registered_number - (
SELECT
MAX(last)
FROM (
SELECT
MAX(b) as last
FROM
x
WHERE
a = type
UNION ALL
SELECT
MAX(b) as last
FROM
y
WHERE
a = type
) as last_table
) as last
FROM `x`;
示例数据
Table X
a
b
1
25
2
26
3
27
TABLE Y
a
b
1
25
2
24
3
31
TABLE s
id
type
registered_number
1
1
7
2
2
8
3
3
9
预期结果
type
last
1
18
2
18
3
22
我建议首先对 x
和 y
表进行联合,然后将 s
连接到联合子查询的聚合。
SELECT s.type, t.b AS last
FROM s
INNER JOIN
(
SELECT a, MAX(b) AS b
FROM
(
SELECT a, b FROM x
UNION ALL
SELECT a, b FROM y
) t
GROUP BY a
) t
ON t.a = s.type
ORDER BY s.type;
我有一个非常复杂的查询,它涉及一个子查询,这个子查询用作联合 table。我想使用第一级的列(子查询之前的字段)作为联合中 where 子句的一部分。像这样:
SELECT
type,
registered_number - (
SELECT
MAX(last)
FROM (
SELECT
MAX(b) as last
FROM
x
WHERE
a = type
UNION ALL
SELECT
MAX(b) as last
FROM
y
WHERE
a = type
) as last_table
) as last
FROM `x`;
示例数据
Table X
a | b |
---|---|
1 | 25 |
2 | 26 |
3 | 27 |
TABLE Y
a | b |
---|---|
1 | 25 |
2 | 24 |
3 | 31 |
TABLE s
id | type | registered_number |
---|---|---|
1 | 1 | 7 |
2 | 2 | 8 |
3 | 3 | 9 |
预期结果
type | last |
---|---|
1 | 18 |
2 | 18 |
3 | 22 |
我建议首先对 x
和 y
表进行联合,然后将 s
连接到联合子查询的聚合。
SELECT s.type, t.b AS last
FROM s
INNER JOIN
(
SELECT a, MAX(b) AS b
FROM
(
SELECT a, b FROM x
UNION ALL
SELECT a, b FROM y
) t
GROUP BY a
) t
ON t.a = s.type
ORDER BY s.type;