[英]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.