2015-05-11 8 views
1

У меня возникла проблема с приведенным ниже запросом. В основном приведенный ниже запрос дает мне все элементы из таблицы ITEM_MASTER, которые расположены в местоположении «9999» из таблицы ITEM_LOCATION и имеют статус «C» снова в таблице ITEM_LOCATION. Я хочу проверить, находится ли какой-либо из этих элементов в запросе ниже в любом другом месте и имеет статус «A».SQL Query - SQL Developer

Поэтому в основном я хочу слишком перекрестная ссылка элементы из этого запроса, чтобы увидеть, если любой из них также появляются в любом другом месте, а не только 9999, и если они имеют статус «А»

SELECT IM.ITEM MIN, 
    IM.ITEM_DESC, 
    IL.ITEM MIN, 
    IL.LOC, 
    IL.STATUS 
    FROM ITEM_MASTER IM,ITEM_LOC IL 
    WHERE IM.ITEM_LEVEL = 2 
    AND IM.TRAN_LEVEL = 2 
    AND IL.STATUS = 'C' 
    AND IM.ITEM = IL.ITEM 
    AND IL.LOC = 9999; 

Благодаря!

ответ

5

Во-первых, вы должны написать запрос с использованием надлежащего join синтаксис:

SELECT IM.ITEM MIN, IM.ITEM_DESC, 
     IL.ITEM MIN, IL.LOC, IL.STATUS 
FROM ITEM_MASTER IM JOIN 
    ITEM_LOC IL 
    ON IM.ITEM = IL.ITEM 
WHERE IM.ITEM_LEVEL = 2 AND IM.TRAN_LEVEL = 2 AND IL.STATUS = 'C' AND 
     IL.LOC = 9999; 

Вы можете выполнить то, что вы хотите с exists:

SELECT IM.ITEM MIN, IM.ITEM_DESC, 
     IL.ITEM MIN, IL.LOC, IL.STATUS 
FROM ITEM_MASTER IM JOIN 
    ITEM_LOC IL 
    ON IM.ITEM = IL.ITEM 
WHERE IM.ITEM_LEVEL = 2 AND IM.TRAN_LEVEL = 2 AND IL.STATUS = 'C' AND 
     IL.LOC = 9999 AND 
     EXISTS (SELECT 1 
       FROM ITEM_MASTER IM2 JOIN 
        ITEM_LOC IL2 
        ON IM2.ITEM = IL2.ITEM 
       WHERE IM2.ITEM = IM.ITEM AND 
        IL2.LOC <> 9999 AND 
        IL2.STATUS = 'A' 
      ); 
+0

Мне сказали, чтобы не использовать JOINS и использовать Allas 'вместо –

+0

+1. Просто две вещи: 'im2.Loc <> 9999' не требуется, если я хорошо понимаю вопрос (я считаю, что нужно проверить только stauts = 'A', но я могу ошибаться). И существо может быть в случае, когда в select ... –

+0

Это правильный ответ и правильный способ сделать это. Вы все равно можете использовать таблицы в объединениях. Хотя @ RaphaëlAlthaus прав, вам не нужен <> 9999. –