簡體   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