SQL脚本列名歧义求助:指定表仍报Customers.customer_id歧义
解决SQLite中UPDATE JOIN的列名歧义问题
你遇到的问题是因为Programiz在线SQL编译器默认使用SQLite,而你的UPDATE写法是SQL Server/PostgreSQL这类数据库的语法,SQLite不支持这种格式,反而会因为重复引用Customers表导致列名歧义。
原来的代码里,你在UPDATE和FROM里都写了Customers,SQLite会把这当成两个独立的表引用——哪怕你加了Customers.customer_id,它也分不清是UPDATE子句里的Customers,还是FROM子句里的Customers,所以抛出歧义错误。
给你两种SQLite兼容的写法:
第一种用EXISTS子查询,兼容性更好:
UPDATE Customers SET last_name = 'cow' WHERE EXISTS ( SELECT 1 FROM Orders WHERE Orders.customer_id = Customers.customer_id AND Orders.item = 'Keyboard' );
第二种是SQLite 3.33.0及以上版本支持的UPDATE FROM语法,更简洁:
UPDATE Customers SET last_name = 'cow' FROM Orders WHERE Customers.customer_id = Orders.customer_id AND Orders.item = 'Keyboard';
这两种写法都能避免表引用重复的问题,也就不会出现列名歧义了。
内容的提问来源于stack exchange,提问作者Jackson Roach
相关产品推荐
相关产品推荐

