UPDATE goods_copy1 SET supplier_id = temp.supplier_id FROM goods_copy1 g1 INNER JOIN ( SELECT gpd.file_id, gpd.goods_id, im.supplier_id, g.supplier_id supplier_id2 FROM import_file im LEFT JOIN `goods_ppt_details` gpd ON gpd.file_id = im.file_id LEFT JOIN goods_copy1 g ON gpd.goods_id = g.goods_id WHERE gpd.tenant_id = 174 AND g.is_delete = '2' AND im.supplier_id != 0 AND g.supplier_id = 0 GROUP BY gpd.goods_id ) temp ON temp.goods_id = g1.goods_id这个执行不成功是什么问题
时间: 2024-01-16 12:05:28 浏览: 144
这个 SQL 语句的问题可能是在 `UPDATE` 子句中没有指定要更新的表别名。你可以尝试以下修改:
```
UPDATE goods_copy1 g1
SET g1.supplier_id = temp.supplier_id
FROM (
SELECT gpd.goods_id, im.supplier_id
FROM import_file im
LEFT JOIN goods_ppt_details gpd ON gpd.file_id = im.file_id
LEFT JOIN goods_copy1 g ON gpd.goods_id = g.goods_id
WHERE gpd.tenant_id = 174 AND g.is_delete = '2' AND im.supplier_id != 0 AND g.supplier_id = 0
GROUP BY gpd.goods_id
) temp
WHERE temp.goods_id = g1.goods_id;
```
这里使用了别名 `g1` 指定要更新的表,同时将子查询的结果用作临时表来更新 `goods_copy1` 表。
相关问题
# 将 listings_detail 与 neighbourhoods 进行空间连接 merged = gpd.sjoin(geo_df, neighbourhoods, how="inner", op='intersects')怎么改
在地理空间数据分析中,如果你想要将两个 GeoDataFrame,`listings_detail` 和 `neighbourhoods`,按照它们的空间边界进行合并(即只保留那些在彼此范围内相交的部分),你可以使用 `geopandas` 的 `sjoin()` 函数。原代码假设使用的是 "inner" 合并策略,这意味着结果只包含两者都有的记录,并且通过 'intersects' 关键字检查几何形状的交集。
如果要修改代码,比如更改合并策略、使用不同的匹配条件,例如完全覆盖 ('within') 或者基于距离 ('distance'),你需要做如下调整:
```python
# 更改合并策略,例如使用 'left' 来保留所有 listings_detail 记录,即使不在 neighbourhoods 范围内
merged = gpd.sjoin(geo_df, neighbourhoods, how="left", op='intersects')
# 或者使用 'within' 来确保 only those listings in the neighbourhoods
merged = gpd.sjoin(geo_df, neighbourhoods, how="inner", op='within')
# 或者基于距离,如查找最近邻的邻居
radius = 500 # 设置搜索半径,单位可能是米或其他度量
merged = gpd.sjoin(geo_df, neighbourhoods, how="nearest", distance_col='distance', tolerance=radius)
```
记得在使用 'distance' 时,需要先计算两者之间的距离字段,并确保 'distance_col' 参数指向正确的列名。
gpd.read_file()函数具体用法
该函数是 pandas 库中的一个方法,用于读取文件并将其转换为 pandas DataFrame 数据结构。具体用法如下:
读取 CSV 文件:
```python
import pandas as pd
data = pd.read_file('filename.csv', encoding='utf-8')
```
读取 Excel 文件:
```python
import pandas as pd
data = pd.read_file('filename.xlsx', sheet_name='Sheet1')
```
读取 SQL 数据库中的表:
```python
import pandas as pd
import sqlite3
conn = sqlite3.connect('filename.db')
data = pd.read_file('SELECT * FROM tablename', conn)
```
其中,CSV 和 Excel 文件的读取方式与常规表格读取相同,SQL 数据库的读取方式需先使用 sqlite3 模块连接数据库,并在读取方法中传入 SQL 语句和连接对象。
阅读全文
相关推荐
















