2014-09-18 6 views
0

Я работаю с базой данных Oracle в первый раз и снова наткнулся на другую проблему. Когда я хочу выбрать все строки в таблице с некоторыми JOINS, я получаю только первые 350 строк из 15 000 строк.Почему мой SELECT возвращает только подмножество строк?

Кто-нибудь знает, существует ли какой-либо предел где-то, о котором я не знаю?

Ниже мой запрос, если это необходимо:

SELECT orders.plant, orders.workcenter, workcenters.occupied, 
     workcenters.section, workcentersections.section, orders.capacitycat, 
     orders.week, orders.earlieststartdate, orders.lateststartdate, 
     orders.useropstatus, orders.programstatus, orders.reqhours, 
     orders.finishdate, orders.reqquantity, orders.material, parts.TYPE, 
     parttypes.TYPE, orders.ordernumber, orders.operation, 
     orders.preoperation, orders.seqoperation, orders.projectcode, 
     orders.queuetime, orders.hoursworked, orders.operationtext, 
     orders.shorttext 
    FROM (((orders INNER JOIN workcenters ON orders.workcenter = 
                   workcenters.code) 
     INNER JOIN 
     workcentersections ON workcenters.section = workcentersections.ID) 
     INNER JOIN 
     parts ON orders.material = parts.material) 
     INNER JOIN 
     parttypes ON parts.TYPE = parttypes.ID 
+0

Какой клиент вы используете для выполнения запроса и получения результатов> –

+3

Как вы знаете, что результат должен быть 15000 строк? У вас есть значения «NULL» в ваших внешних ключах? –

+2

Отлаживайте его, комментируя объединения, а затем запускайте его, а затем комментируя в каждом соединении. Тогда вы легко найдете, какое соединение делает то, чего вы, очевидно, не ожидаете. –

ответ

1

Предполагая, что ваши заказы таблица содержит 15000 строк и исходный запрос возвращает только 350 строк, вы можете заменить (ВНУТРЕННИЙ) объединяется с OUTER JOIN и:

SELECT orders.plant, orders.workcenter, workcenters.occupied, 
     workcenters.section, workcentersections.section, orders.capacitycat, 
     orders.week, orders.earlieststartdate, orders.lateststartdate, 
     orders.useropstatus, orders.programstatus, orders.reqhours, 
     orders.finishdate, orders.reqquantity, orders.material, parts.TYPE, 
     parttypes.TYPE, orders.ordernumber, orders.operation, 
     orders.preoperation, orders.seqoperation, orders.projectcode, 
     orders.queuetime, orders.hoursworked, orders.operationtext, 
     orders.shorttext 
    FROM orders 
     LEFT OUTER JOIN workcenters ON orders.workcenter = workcenters.code 
     LEFT OUTER JOIN workcentersections 
      ON workcenters.section = workcentersections.ID 
     LEFT OUTER JOIN parts ON orders.material = parts.material 
     LEFT OUTER JOIN parttypes ON parts.TYPE = parttypes.ID 

Это даст вам все строки из ORDERS (вы можете получить дубликаты, если у вас нет строгих отношений 1: N).

Затем вы должны заменить LEFT OUTER JOINs один за другим INNER JOINs и проверить количество строк каждого из этих измененных запросов, чтобы узнать, какой из JOINs отвечает за недостающие данные.

Смежные вопросы