簡體   English   中英

SQL-將MSSQL查詢重寫為Oracle SQL

[英]SQL - Rewrite MSSQL query to Oracle sql

我有一個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)) )

您能幫我怎樣正確地重寫它嗎?結果集較大的原因是什么?

基本的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)

這是標准的 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
             );

這也適用於任何數據庫。

如果查詢得到不同的結果,則最可能的原因是兩個數據庫中的數據不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM