我想要UNION两栏:
T1.STATUS,T8.REASON在一列中,WHERE T1.OUTLET_ID = T8.OUTLET_ID AND T1.ENTRY_DATE = T8.ENTRY_DATE
但是当我在两个表的UNION中添加WHERE子句时,它显示错误:
ORA-00904:“T8”。“ENTRY_DATE”:标识符无效
这是我的疑问:
SELECT * FROM
(
SELECT T1.OUTLET_ID,T1.STATUS,T1.ENTRY_DATE FROM T_ORDER_DETAIL T1
UNION
SELECT T8.OUTLET_ID,T8.REASON,T8.ENTRY_DATE FROM T_NON_PRODUCTIVE_SALES T8
)
WHERE T1.OUTLET_ID = T8.OUTLET_ID AND T1.ENTRY_DATE = T8.ENTRY_DATE
问题出在哪里?
答案 0 :(得分:1)
您可以像这样重写查询:
SELECT *
FROM (
SELECT T1.OUTLET_ID id,
T1.STATUS res,
T1.ENTRY_DATE dt
FROM T_ORDER_DETAIL T1,
T_NON_PRODUCTIVE_SALES T8
WHERE T1.OUTLET_ID = T8.OUTLET_ID
AND T1.ENTRY_DATE = T8.ENTRY_DATE
UNION
SELECT T8.OUTLET_ID id,
T8.REASON res,
T8.ENTRY_DATE dt
FROM T_ORDER_DETAIL T1,
T_NON_PRODUCTIVE_SALES T8
WHERE T1.OUTLET_ID = T8.OUTLET_ID
AND T1.ENTRY_DATE = T8.ENTRY_DATE);
答案 1 :(得分:1)
SELECT * FROM
(
SELECT T1.OUTLET_ID,T1.STATUS,T1.ENTRY_DATE FROM T_ORDER_DETAIL T1
UNION
SELECT T8.OUTLET_ID,T8.REASON,T8.ENTRY_DATE FROM T_NON_PRODUCTIVE_SALES T8
)
WHERE T1.OUTLET_ID = T8.OUTLET_ID AND T1.ENTRY_DATE = T8.ENTRY_DATE
执行查询时,子查询返回一个列名为OUTLET_ID ,STATUS ,ENTRY_DATE
的记录表。简而言之,您可以使用这些列获得table
。
在写入条件的外部查询中
WHERE T1.OUTLET_ID = T8.OUTLET_ID和T1.ENTRY_DATE = T8.ENTRY_DATE
Oracle不了解最新的T1
和T8
。因为外部查询将子查询的结果视为table
。而且你的桌子上没有这样的名字,所以它给出了错误。正如其他人之前解释的那样,您可以加入并解决您的问题。
答案 2 :(得分:0)
您的子查询只提供一个结果集,因此您不能JOIN
这样。而是将您的查询更改为
SELECT T1.OUTLET_ID,T1.STATUS,T1.ENTRY_DATE,
T8.OUTLET_ID,T8.REASON,T8.ENTRY_DATE AS T8_ENTRY_DATE
FROM T_ORDER_DETAIL T1
JOIN T_NON_PRODUCTIVE_SALES T8
ON T1.OUTLET_ID = T8.OUTLET_ID AND T1.ENTRY_DATE = T8.ENTRY_DATE;
答案 3 :(得分:0)
您应该使用INNER JOIN而不是UNION:
SELECT
t1.outlet_id, t1.status, t8.status, t1.entry_date
FROM
t_order_detail t1
INNER JOIN
t_non_productive_sales t8
ON t1.outlet_id = t8.outlet_id
AND t1.entry_date = t8.entry_date;