我使用一些过滤器在记录中创建了一个视图,我必须添加仅包含来自另一个表的id的行和sql结果末尾的特定行。
所以预期结果是这样的:
Column 1 | Column 2 | Column 3 | Column4
1 0001 | 565 | AM1 | DR01
.
.
59 TEST1 | | |
60 NON_IMMO | | |
第59行是第二个表的id,第60行是指定行。 我的查询是这样的:
SELECT DISTINCT a.asset_id
, a.serial_id
, a.VIN
, b.project_id
FROM ps_asset a
WHERE --Some conditions
UNION
SELECT PO_GROUP_ID
,' '
, ' '
, ' '
FROM PS_PO_GROUP_TBL
UNION
SELECT 'NON_IMMO'
,' '
,' '
,' '
FROM dual
但问题是使用了这个问题我最后没有得到具体的行。
我觉得SGBD显示按字母顺序排列的2个UNIONS。
Column 1 | Column 2 | Column 3 | Column4
1 0001 | 565 | AM1 | DR01
.
.
59 NON_IMMO | | |
60 TEST1 | | |
感谢您的帮助。
答案 0 :(得分:5)
将最后UNION
更改为UNION ALL
以跳过删除重复项(作为副作用命令行)。那应该够了......
...
FROM PS_PO_GROUP_TBL
UNION ALL
SELECT 'NON_IMMO'
...
答案 1 :(得分:2)
UNION不会强制对记录下达订单。您需要另一个错误的第5列以确保数据结束。见例子
SELECT COLUMN1
FROM
(
SELECT COLUMN1, 0 ORDER_BY FROM TABLE1
UNION
SELECT 'FOOTER' COLUMN1, 1 ORDER_BY FROM DUAL
)
ORDER BY ORDER_BY
此外,如果您的数据可能与最后的内容匹配,那么您将要使用UNION ALL来确保记录仍然添加。
答案 2 :(得分:0)
您的查询将变为:
您必须将查询包装在一个主查询中,您可以在其中应用全局ORDER BY
第二个:我删除了DISTINCT,因为UNION删除了重复的
SELECT asset_id, serial_id, vin, project_id
FROM
(SELECT a.asset_id, a.serial_id,
a.VIN, b.project_id
FROM ps_asset a
WHERE --Some conditions
UNION
SELECT PO_GROUP_ID, ' ', ' ', ' '
FROM PS_PO_GROUP_TBL
UNION
SELECT 'NON_IMMO', ' ', ' ', ' '
FROM dual)
ORDER BY serial_id