2016-10-06 3 views
1

Я пытаюсь получить результат подсчета с помощью оператора SET в SQL Developer.SQL: использовать оператор SET для получения результата подсчета

я должен найти, сколько «attribute1» в «table_name1», но не в «table_name2»

По существу я хочу результат, который я хотел бы получить из следующего запроса, но с использованием оператора SET.

SELECT count(distinct <attribute1>) 
FROM <table_name1> 
WHERE <attribute1> IS NOT (SELECT <attribute1> 
          FROM <table_name2>); 

Может ли кто-нибудь мне помочь?

ответ

0

Если вы должны использовать множество оператора, то вы можете решить эту проблему с помощью MINUS:

SELECT COUNT(*)      -- use COUNT(DISTINCT attribute1) to avoid 
FROM         -- duplicates 
(
    SELECT attribute1 
    FROM table_name1 
    MINUS 
    SELECT attribute1 
    FROM table_name2 
) t 

Однако, я бы, вероятно, использовать LEFT JOIN здесь, потому что это концептуально простой:

SELECT COUNT(DISTINCT t1.attribute1) -- replace with COUNT(*) to count duplicates 
FROM table_name1 t1 
LEFT JOIN table_name2 t2 
    ON t1.attribute1 = t2.attribute1 
WHERE t2.attribute1 IS NULL   -- indicates that attribute does NOT appear in 
            -- the second table 
+0

Мне нужно использовать оператор SET. LEFT JOIN не является оператором SET. – user4824195

+0

@ user4824195 Я обновил свой ответ, вы также можете использовать 'MINUS'. –

+0

OMG ты спас мне жизнь. СПАСИБО БОЛЬШОЕ!!! – user4824195

0

Пожалуйста, попробуйте ниже решение:

SELECT count(distinct <attribute1>) 
FROM <table_name1> 
WHERE <attribute1> NOT IN (SELECT <attribute1> 
          FROM <table_name2>); 

Я надеюсь, что это будет полезно для вас.

+0

Мне нужно использовать оператор SET. Не реляционный оператор. – user4824195

0
SELECT COUNT(<attribute1>) 
FROM <table_name1> 
WHERE <attribute1> MINUS (SELECT <attribute1> 
          FROM <table_name2>); 

https://docs.oracle.com/cd/B19306_01/server.102/b14200/operators005.htm

Обновленный ответ

SELECT COUNT(X.id_num) 
(SELECT id_num 
FROM Tree 
WHERE id_num) 
MINUS 
(SELECT id_num 
FROM Bird) AS X 
+0

Нам не нужно использовать DISTINCT, так как MINUS возвращает только результат результата DISTINCT –

+0

Это возвращает сообщение об ошибке - INVALID Relational Operator. – user4824195

+0

Можете ли вы поделиться своим точным запросом и полученной вами ошибкой? –

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