Oracle SQL Вопрос, Поиск строк, не содержащих указанных c значений - PullRequest
0 голосов
/ 17 февраля 2020

Я видел ответы на эти вопросы, которые близки, но не совсем так для меня.

Представьте, что у вас есть несколько строк. Вы хотите найти строки в существующей таблице, которые содержат эти строки, и строки, которые не содержат.

Найти строки, которые содержат строки в столбце, конечно, легко, например, myTable has следующие столбцы:

  • myTableID varChar (3)
  • myTableValue varChar (20)

Со следующими строками:

ABC | The First Row
GHI | The Second Row
JKL | The Third Row
select * 
from myTable 
where myTableID  in ('ABC','DEF','GHI','JKL');

myTable не содержит строку со значением 'DEF' в столбце myTableID. Набор ответов не будет содержать строку для этого. Там нет ни одного!

Однако то, что я хочу сделать, это трактовать это как что-то вроде LEFT OUTER JOIN со значением 'DEF' перед набором столбцов, которые содержат нули. Дает следующий вид результата:

ABC| ABC | The First Row
DEF| null|null
GHI| GHI|The Second Row
JKL| JKL|The Third Row

У меня есть несколько сотен ключевых значений, на которые мне нужно обратить внимание.

Есть ли у кого-нибудь здесь какие-либо мысли о том, как лучше всего это сделать?

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

У меня есть несколько сотен ключевых значений, которые мне нужно посмотреть.

Это много значений, которые нужно записать вручную. Я бы предложил поместить их все в таблицу, скажем, в myref(id).

. Затем вы можете сгенерировать ожидаемый набор результатов, просто набрав left join:

select
    r.id,
    t.*
from myref r
left join mytable t on t.id = r.id
0 голосов
/ 17 февраля 2020

Используйте коллекцию или VARRAY и выражение коллекции таблицы с LEFT OUTER JOIN. SYS.ODCIVARCHAR2LIST - это встроенный VARRAY, который вы можете использовать:

SELECT t.COLUMN_VALUE AS id,
       y.*
FROM   TABLE(
         SYS.ODCIVARCHAR2LIST( 'ABC', 'DEF', 'GHI', 'JKL' )
       ) t
       LEFT OUTER JOIN your_table y
       ON ( t.COLUMN_VALUE = y.id )

Или вы можете определить свою собственную коллекцию:

CREATE TYPE stringlist IS TABLE OF VARCHAR2(20);

и использовать ее:

SELECT t.COLUMN_VALUE AS id,
       y.*
FROM   TABLE(
         stringlist( 'ABC', 'DEF', 'GHI', 'JKL' )
       ) t
       LEFT OUTER JOIN your_table y
       ON ( t.COLUMN_VALUE = y.id )

который будет выводить:

ID  | ID   | VALUE         
:-- | :--- | :-------------
ABC | ABC  | The First Row 
DEF | <em>null</em> | <em>null</em>          
GHI | GHI  | The Second Row
JKL | JKL  | The Third Row 

дБ <> скрипка здесь

Вы также можете передать коллекция / VARRAY как одна переменная связывания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...