我在MySQL中有2个表。
一个交易的重要列,每行都有借方帐户ID和贷方帐户ID。我有第二个表,其中包含帐户名和与帐户ID相关的特殊编号。我想以某种方式尝试sql查询,该查询将从交易表中获取数据,并从第二个表中分配帐户名和帐号。

我尝试使用两个查询来完成所有操作,一个查询将获取交易,第二个查询将获取帐户详细信息,然后我在数据框上进行了迭代并逐一分配了所有内容,这似乎不是一个好主意

    query = "SELECT  tr_id, tr_date, description, dr_acc, cr_acc, amount, currency, currency_rate, document, comment FROM transactions WHERE " \
            "company_id = {} {} and deleted = 0 {} LIMIT {}, {}".format(
        company_id, filter, sort, sn, en)

    df = ncon.getDF(query)

    df.insert(4, 'dr_name', '')
    df.insert(6, 'cr_name', '')

    data = tuple(list(set(df['dr_acc'].values.tolist() + df['cr_acc'].values.tolist())))

    query = "SELECT account_number, acc_id, account_name FROM tb_accounts WHERE company_id = {} and deleted = 0 and acc_id in {}".format(
        company_id, data)

    df_accs = ncon.getDF(query)

    for index, row in df_accs.iterrows():
        acc = str(row['acc_id'])
        ac = row['account_number']
        nm = row['account_name']

        indx = df.index[df['dr_acc'] == acc].tolist()
        df.at[indx, 'dr_acc'] = ac
        df.at[indx, 'dr_name'] = nm

        indx = df.index[df['cr_acc'] == acc].tolist()
        df.at[indx, 'cr_acc'] = ac
        df.at[indx, 'cr_name'] = nm

最佳答案

我想您正在寻找的是SQL JOIN语句。

认真编写可能根据您的代码工作的查询:

    query = '''
SELECT transactions.tr_id,
       transactions.tr_date,
       transactions.description,
       transactions.dr_acc,
       transactions.cr_acc,
       transactions.amount,
       transactions.currency,
       transactions.currency_rate,
       transactions.document,
       transactions.comment
FROM transactions INNER JOIN tb_accounts ON tb_accounts.acc_id = transactions.acc_id
WHERE
        transactions.company_id = {} AND
        tb_accounts.company_id = {} AND
        transactions.deleted = 0 AND
        tb_accounts.deleted = 0
ORDER BY transactions.tr_id
LIMIT 10;'''


对于acc_id相同的每一对行,上述查询将大致显示两个表中列出的所有字段的查询结果。

注意,上面的查询可能不会有很好的性能。 SQL JOIN语句必须谨慎编写,但是我在上面以一种易于理解的方式编写了它,以说明JOIN的功能。

作为一种习惯,您应该在可以使用连接时尝试进行编程。只要您注意write a join properly so that it can be efficient,MySQL引擎几乎每次都会击败python代码以提高性能。

关于python - 当其中一个包含ID,第二个包含与该ID相关的名称时,需要帮助合并两个SQL表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55750653/

10-14 19:18
查看更多