我一直在尋找像SQLite會提升不變約束嗎?
https://forums.asp.net/t/1887910.aspx?Inner+join+2+tables+but+return+all+if+1+table+empty
有人類似的問題的解決方案提出了類似下面
SELECT
*
FROM
TableA AS a
LEFT JOIN TableB AS b ON b.A_Id = a.A_Id
WHERE
b.A_Id IS NOT null
OR
NOT EXISTS (SELECT TOP 1 A_Id FROM TableB)
的解決方案是否SQLite的運行not exists (select top 1 A_Id from TableB)
每一行?對於所有行,這種情況應該是相同的。我想知道查詢引擎是否可以將它提升到最高點。否則,這將花費很多成本。
我嘗試以下
EXPLAIN QUERY PLAN
select test.testID, test.name, parameter.name
from test
left join parameter
on test.testID = parameter.testID
where
parameter.testID is not null
or not exists (select testId from parameter limit 1)
據報道
selectid order form detail
0 0 0 SCAN TABLE test (~1M rows)
0 1 1 search table parameter using automatic covering index (testID=?) (~ 7 rows)
0 0 0 EXECUTE SCALAR SUBQUERY 1
1 0 0 SCAN TABLE parameter (~1M rows)
這是否意味着SQLite不葫蘆(select testId from parameter limit 1)
?
對其運行「EXPLAIN QUERY PLAN」以查看其功能:https://sqlite.org/eqp.html – Thilo
這不是「約束」 - 這是一個相關子查詢。 – Dai
這個查詢意味着什麼返回?它看起來應該是'INNER JOIN',儘管我不明白'NOT EXISTS'子查詢是用來完成什麼的。 – Dai