SQL - переписать MSSQL-запрос в Oracle SQL - PullRequest
0 голосов
/ 27 ноября 2018

У меня SQL-запрос:

SELECT * 
FROM Table_1
WHERE (0 < (SELECT COUNT(Table_2.ID)
            FROM Table_2 inner join Table_3
                on Table_2.ID= Table_3.A_ID AND Table_3.B_ID = Table_1.ID))

Он отлично работает на Microsoft SQL, но мне нужно записать его в Oracle sql, где он не работает, потому что Table_1 отсутствует в подзапросе.

Я пытался переписать его, но с переписанной формой он дает 20060 строк, в то время как исходный sql имеет всего 497 строк в результате.

Одна из переписанных:

SELECT * 
FROM Table_1
WHERE (0 < (SELECT COUNT(Table_2.ID)
            FROM Table_2 inner join Table_3
                on  Table_2.ID = Table_3.A_ID
                AND Table_3.B_ID IN (SELECT Table_1.ID FROM Table_1)) )

Не могли бы вы дать мне некоторую помощь, как правильно переписать его, и в чем причина большего набора результатов?

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Это стандартный SQL, хотя я бы поставил условие корреляции в WHERE:

SELECT * 
FROM Table_1
WHERE 0 < (SELECT COUNT(Table_2.ID)
           FROM Table_2 INNER JOIN
                Table_3
                ON Table_2.ID = Table_3.A_ID 
           WHERE Table_3.B_ID = Table_1.ID
          );

Это должно работать в обеих базах данных.

Однако я написал бы это, используя EXISTS:

SELECT * 
FROM Table_1
WHERE EXISTS (SELECT 1
              FROM Table_2 INNER JOIN
                   Table_3
                   ON Table_2.ID = Table_3.A_ID 
              WHERE Table_3.B_ID = Table_1.ID
             );

Это также должно работать на любой базе данных.

Если ваши запросыполучая разные результаты, наиболее вероятная причина заключается в том, что в двух базах данных данные различны.

0 голосов
/ 27 ноября 2018

Работает ли базовый EXISTS запрос?

SELECT * 
FROM Table_1
WHERE EXISTS (SELECT 1
              FROM Table_2 inner join Table_3
                on Table_2.ID = Table_3.A_ID AND Table_3.B_ID = Table_1.ID)

Или IN:

SELECT * 
FROM Table_1
WHERE ID IN (SELECT Table_2.ID 
             FROM Table_2 inner join Table_3
                on Table_2.ID = Table_3.A_ID)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...