我试图在Oracle数据库上执行一个查询。
我的桌子结构是:
我使用以下查询:
SELECT o.id ID, ROWNUM rn /*row 1*/
FROM TABLE_D d
LEFT JOIN TABLE_O o ON d.O_ID=o.ID
RIGHT JOIN TABLE_R r ON r.O_ID = o.ID AND r.TYPE = 'SOME_TYPE' /*row 4*/
RIGHT JOIN TABLE_MTM mtm ON o.ID = mtm.ORD_ID /*row 5-6*/
RIGHT JOIN TABLE_M m ON mtm.M_ID = m.ID AND m.TYPE = 'SOMETHING_ELSE' /*row 5-6*/
WHERE o.ACTIVE=0
ORDER BY o.SOME_COL ASC; (这只是我整个查询的一小部分;是的,我确实需要ROWNUM、'd‘表和所有东西)
有人能告诉我我错过了什么吗?
更新:所有这些都在Oracle 12c上运行得很好。在10g上不能正常工作。
发布于 2016-07-18 15:05:50
你错过了很多东西:
SELECT o.id ID, ROWNUM as rn /*row 1*/
FROM TABLE_D d LEFT JOIN
TABLE_O o
ON d.O_ID = o.ID AND o.ACTIVE = 0 LEFT JOIN
TABLE_R r
ON r.O_ID = o.ID AND r.TYPE = 'SOME_TYPE' LEFT JOIN /*row 4*/
TABLE_MTM mtm
ON o.ID = mtm.ORD_ID LEFT JOIN /*row 5-6*/
TABLE_M m
ON mtm.M_ID = m.ID AND m.TYPE = 'SOMETHING_ELSE' /*row 5-6*/
ORDER BY o.SOME_COL ASC; 首先,对于LEFT JOIN,第二个表的条件应该在ON子句中,而不是WHERE子句中。其次,对于RIGHT JOIN,第一个表的条件应该在ON子句中。第二个表(用于RIGHT JOIN)上的条件不筛选行。
在任何情况下,您都不应该将LEFT JOIN和RIGHT JOIN混合在同一个查询中,除非您真正知道自己正在做什么,并且确实需要它。我怀疑LEFT JOIN和上面的构造应该是正确的。
https://stackoverflow.com/questions/38439962
复制相似问题