我有一个第三方应用程序,它根据发布版本将数据生成到许多单独的表中。数据格式保持一致,因此可以对不同类型的表执行联合。
我想在一个结果数据集中包含两个联合的字段。
第一个联合是使用的设备列表,使用以下语句生成:
foldMapDefault f Nothing = mempty
foldMapDefault f (Just a) = f a
此表中的每个设备可以有多个表条目。
这是表结构:
foldMap
第二个联合是使用以下声明生成的库存报告:
Maybe
这是表结构:
SELECT *
FROM (SELECT * FROM PMT_EQUIPMENT_USED_OLD
UNION
SELECT * FROM PMT_EQUIPMENT_USED_X
) AS U
WHERE U.GRID_EQUIPMENT_ID IS NOT NULL AND U.APP_STATUS <> 'CANCELLED' ORDER BY U.APP_NUMBER, U.ROW
我想在设备列表中包含 APP_UID 相同的报表中的字段。
以下是挑战:数据不断更新,我将查询传递给报告工具,因此我只能使用一个语句。
有没有办法组合两组表并使用一个语句连接它们?如果没有,是否有其他方法我应该考虑?
任何提示都将不胜感激!
答案 0 :(得分:1)
是的,有一种方法可以使用mysql加入2个联合选择语句
就像普通的加入一样
示例:
Select * from tbl1 join tbl2 on tbl1.linkcolumn = tbl2.linkcolumn
只需将tbl1 / tbl2替换为您的Select union语句并为其添加别名。
SELECT *
FROM (SELECT *
FROM (SELECT *
FROM pmt_equipment_used_old
UNION
SELECT *
FROM pmt_equipment_used_x) AS U
WHERE U.grid_equipment_id IS NOT NULL
AND U.app_status <> 'CANCELLED'
ORDER BY U.app_number,
U.row) AS TBL1
JOIN (SELECT *
FROM (SELECT *
FROM pmt_rpt_old
UNION
SELECT *
FROM pmt_rpt_x) AS A
ORDER BY A.app_number) AS TBL2
ON TBL1.app_uid = TBL2.app_uid
此外,不需要将联合包装到子查询中,因为这两个选择语句是union具有相同的表列。
将您的
之后ORDER BY
放在JOIN声明
SELECT *
FROM (SELECT *
FROM pmt_equipment_used_old
UNION
SELECT *
FROM pmt_equipment_used_x
WHERE grid_equipment_id IS NOT NULL
AND app_status <> 'CANCELLED')
AS TBL1
JOIN (SELECT *
FROM pmt_rpt_old
UNION
SELECT *
FROM pmt_rpt_x
ORDER BY app_number) AS TBL2
ON TBL1.app_uid = TBL2.app_uid
ORDER BY TBL1.app_number, TBL1.row
答案 1 :(得分:1)
请注意,您的第二个查询在功能上与以下内容相同:
SELECT * FROM PMT_RPT_OLD
UNION
SELECT * FROM PMT_RPT_X
ORDER BY APP_NUMBER