繁体   English   中英

SQL连接两个表,在Python上具有相同的列名

[英]SQL join for two tables, with same column names on Python

已经有几个问题有同样的问题,我看了都一样,但仍然没有找到解决方案。 我想从两个表(具有相同名称(device_id)的列)合并并计数。

列名:事件和gender_age_train

import pandas as pd
from sqlalchemy import create_engine # database connection

db_engine = create_engine('sqlite:///devices-train.db')

join_devices = pd.read_sql_query('SELECT device_id, count(device_id), gender_age_train.device_id, count(gender_age_train.device_id) FROM events JOIN gender_age_train on events.device_id = gender_age_train.device_id GROUP BY device_id', db_engine)

print join_devices

python的输出是:

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) ambiguous column name: device_id [SQL: 'SELECT device_id, count(device_id), gender_age_train.device_id, count(gender_age_train.device_id) FROM events JOIN gender_age_train on events.device_id = gender_age_train.device_id GROUP BY device_id']

如前所述,您需要完全限定device_id列,因为它出现在两个表中。 值得注意的是,选择events.device_idgender_age_train.device_id相等(根据join条件)是一点点的。 选择其中之一就足够了:

SELECT   e.device_id, COUNT(*)
FROM     events e
JOIN     gender_age_train g on e.device_id = g.device_id 
GROUP BY e.device_id

当用于联接的列具有相同的名称时,可以使用USING子句 这不仅可以节省键入内容,还可以从联接输出中删除重复的列,以便您可以更轻松地引用它:

SELECT   device_id, COUNT(*)
FROM     events
JOIN     gender_age_train USING (device_id)
GROUP BY device_id;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM