[英]CROSS JOIN with USING?
在使用JavaScript SQL解析器時,我正在針對sqllogic測試進行測試,SQLite也使用該測試來驗證邏輯。
我遇到了這個SQL,無法弄清楚如何處理它。
SELECT ALL * FROM tab1 cor0 CROSS JOIN tab1 USING col1, col2, tab2 AS cor1;
據我了解, CROSS JOIN
將兩個表中的所有行聯接在一起-所以我想USING
部分沒有效果?
USING
部分嗎? 這只是SQLite(也許還有MySQL)的怪異之處。 CROSS JOIN
應該產生笛卡爾積,並且不應該帶有USING
或ON
子句。
但是,SQLite語法允許USING
CROSS JOIN
的ON
或USING
子句。 在這種情況下,它的行為類似於INNER JOIN
。
另外,SQLite允許您為其他類型的連接省去ON
/ USING
子句。 在這種情況下,它們的行為類似於CROSS JOIN
。
我的建議:不要學習這種語法(這是非常不標准的)。 使用以下規則:
ON
/ USING
。 CROSS JOIN
使用ON
/ USING
。 NATURAL JOIN
。 因為這里沒有列出JOIN
鍵,所以代碼的可維護性要差得多,容易出現細微的錯誤,並且如果基礎表發生更改,則可以更改含義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.