-
Notifications
You must be signed in to change notification settings - Fork 985
Closed
Description
Fully reproducible code snippet
>>> import sqlglot.expressions as exp
>>> exp.merge("WHEN MATCHED THEN UPDATE SET my_table.col1 = source_table.col1",
... "WHEN NOT MATCHED THEN INSERT (my_table.id, my_table.col1) VALUES (source_table.id, source_table.col1)",
... into="my_table",
... using="(SELECT * FROM something) source_table",
... on="my_table.id = source_table.id").sql()
'MERGE INTO my_table USING (SELECT * FROM something) AS source_table ON my_table.id = source_table.id WHEN MATCHED THEN UPDATE SET my_table.col1 = source_table.col1 WHEN NOT MATCHED THEN INSERT (my_table.id, my_table.col1) VALUES (source_table.id, source_table.col1)'
>>> exp.merge("WHEN MATCHED THEN UPDATE SET my_table.col1 = source_table.col1",
... "WHEN NOT MATCHED THEN INSERT (my_table.id, my_table.col1) VALUES (source_table.id, source_table.col1)",
... into="my_table",
... using="(SELECT * FROM something) source_table",
... on="my_table.id = source_table.id").sql(dialect="oracle")
'MERGE INTO my_table USING (SELECT * FROM something) AS source_table ON my_table.id = source_table.id WHEN MATCHED THEN UPDATE SET my_table.col1 = source_table.col1 WHEN NOT MATCHED THEN INSERT (my_table.id, my_table.col1) VALUES (source_table.id, source_table.col1)'
At least for Oracle, (SELECT * FROM something) AS source_table
should should not include the AS
; having it will result in ORA-00969: missing ON keyword
.
Official Documentation
https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/MERGE.html
Context
I'm currently manually removing the "AS "
in ibis-project/ibis#11624 as a hack (and then it works). If it's helpful, here's the actual SQLGlot expression I'm building: https://github.com/ibis-project/ibis/blob/21994eb29f1db104aacc7957181fa4a5a327508a/ibis/backends/sql/__init__.py#L605-L651
Metadata
Metadata
Assignees
Labels
No labels