为什么LEFT JOIN总是给我MySQL中的质量id值?

时间:2017-08-17 04:01:34

标签: mysql python-2.7 mariadb

我有下一个用Python制作的GUI,它允许我为租户加载保存在MySQL表中的所有数据,而只需要一个名为' contract'的相关表中的一个数据。 (标有红色圆圈)。

enter image description here

我用于加载此表单的Python代码是下一个:

def fill_entries():
        i = lb.curselection()[0]
        valor = lb.get(i)
        nombs, apells = _arrendatarios[valor]
        cursor.execute("SELECT *, c_cod FROM arrendatarios LEFT JOIN contratos ON arrendatarios.a_cc = contratos.a_cc WHERE a_nombres = %s AND a_apellidos = %s", (nombs, apells))
        result = cursor.fetchall()
        connect.commit()
        for item in result:
                d1 = item[1] #ID
                d2 = item[2] #Mr/Mrs
                d3 = item[3] #City
                d4 = item[4] #Names
                d5 = item[5] #Last names
                #------------And so on
                d53 = item[53] # Num Contract

                cedula.set(d1)
                titulo.set(d2)
                residencia.set(d3)
                nombres.set(d4)
                apellidos.set(d5)
                direccion.set(d6)
                #------------And so on
                numcontract.set(d53)# Num Contract

但问题是我在合同表中想要的是c_cod数据,而不是de c_id,因为此表格描述的一部分是:

MariaDB> desc contratos;
+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| c_id          | int(11)      | NO   | UNI | NULL    | auto_increment |
| c_cod         | int(11)      | NO   | PRI | NULL    |                |
| a_cc          | varchar(50)  | YES  | MUL | NULL    |                |
| inquilino     | varchar(100) | YES  |     | NULL    |                |
+---------------+--------------+------+-----+---------+----------------+

例如,如果我在MySQL中运行查询,我得到了这个:

MariaDB> SELECT arrendatarios.a_cc, c_cod FROM arrendatarios LEFT JOIN  contratos ON arrendatarios.a_cc = contratos.a_cc;
+------------+-------+
| a_cc       | c_cod |
+------------+-------+
| 900157048  |  NULL |
| 71337237   |  NULL |
| 43057196   | 22789 |
| 542550033  |  NULL |
| 3502278    |  NULL |
| 3472265    |  NULL |
| 32460023   |  NULL |
| And so on...       |
+------------+-------+
34 rows in set (0.01 sec)

但Python没有从合约表中提取c_cod,而是c_id,就像我在运行一样:

MariaDB> SELECT arrendatarios.a_cc, c_id FROM arrendatarios LEFT JOIN contratos ON arrendatarios.a_cc = contratos.a_cc;
+------------+------+
| a_cc       | c_id |
+------------+------+
| 900157048  | NULL |
| 71337237   | NULL |
| 43057196   |    8 |
| 542550033  | NULL |
| 3502278    | NULL |
| 3472265    | NULL |
| 32460023   | NULL |
| And so on...      |
+------------+------+
34 rows in set (0.00 sec)

无论我写什么专栏,总是会给我带来相同的结果c_id。我是MySQL的新手,我只是新的基础。那么,我使用了错误的LEFT JOIN吗?因为我想要的只是显示租户信息和合同号码,如果它有或没有。

这里也是租户表的描述。

MariaDB> desc arrendatarios;
+-----------------+--------------+------+-----+---------+----------------+
| Field           | Type         | Null | Key | Default | Extra          |
+-----------------+--------------+------+-----+---------+----------------+
| a_id            | int(11)      | NO   | UNI | NULL    | auto_increment |
| a_cc            | varchar(50)  | NO   | PRI | NULL    |                |
| a_titulo        | varchar(20)  | YES  |     | NULL    |                |
| a_reside        | varchar(50)  | YES  |     | NULL    |                |
| a_nombres       | varchar(50)  | YES  |     | NULL    |                |
| a_apellidos     | varchar(50)  | YES  |     | NULL    |                |
| a_direccion     | varchar(50)  | YES  |     | NULL    |                |
| a_telefono      | varchar(50)  | YES  |     | NULL    |                |
| a_envio         | varchar(50)  | YES  |     | NULL    |                |
| a_email         | varchar(50)  | YES  |     | NULL    |                |
| a_celular       | varchar(50)  | YES  |     | NULL    |                |
| a_dia           | int(11)      | YES  |     | NULL    |                |
| a_mes           | varchar(10)  | YES  |     | NULL    |                |
| a_cumple        | date         | YES  |     | NULL    |                |
| a_profesion     | varchar(50)  | YES  |     | NULL    |                |
| a_empresa       | varchar(50)  | YES  |     | NULL    |                |
| a_oficina       | varchar(50)  | YES  |     | NULL    |                |
| a_tel           | varchar(50)  | YES  |     | NULL    |                |
| a_fax           | varchar(50)  | YES  |     | NULL    |                |
| a_banco         | varchar(50)  | YES  |     | NULL    |                |
| a_tcuenta       | varchar(10)  | YES  |     | NULL    |                |
| a_numcuenta     | varchar(50)  | YES  |     | NULL    |                |
| a_tpersona      | int(11)      | YES  |     | NULL    |                |
| a_retefuente    | int(11)      | YES  |     | NULL    |                |
| a_reteiva       | int(11)      | YES  |     | NULL    |                |
| a_contribuyente | int(11)      | YES  |     | NULL    |                |
| a_gfactura      | int(11)      | YES  |     | NULL    |                |
| a_gcheque       | int(11)      | YES  |     | NULL    |                |
| a_nota          | varchar(200) | YES  |     | NULL    |                |
| co1_cc          | varchar(50)  | YES  |     | NULL    |                |
| co1_nombres     | varchar(50)  | YES  |     | NULL    |                |
| co1_dir         | varchar(50)  | YES  |     | NULL    |                |
| co1_tel1        | varchar(50)  | YES  |     | NULL    |                |
| co1_cargo       | varchar(50)  | YES  |     | NULL    |                |
| co1_empresa     | varchar(59)  | YES  |     | NULL    |                |
| co1_oficina     | varchar(50)  | YES  |     | NULL    |                |
| co1_tel2        | varchar(50)  | YES  |     | NULL    |                |
| co2_cc          | varchar(50)  | YES  |     | NULL    |                |
| co2_nombres     | varchar(50)  | YES  |     | NULL    |                |
| co2_dir         | varchar(50)  | YES  |     | NULL    |                |
| co2_tel1        | varchar(50)  | YES  |     | NULL    |                |
| co2_cargo       | varchar(50)  | YES  |     | NULL    |                |
| co2_empresa     | varchar(59)  | YES  |     | NULL    |                |
| co2_oficina     | varchar(50)  | YES  |     | NULL    |                |
| co2_tel2        | varchar(50)  | YES  |     | NULL    |                |
| co3_cc          | varchar(50)  | YES  |     | NULL    |                |
| co3_nombres     | varchar(50)  | YES  |     | NULL    |                |
| co3_dir         | varchar(50)  | YES  |     | NULL    |                |
| co3_tel1        | varchar(50)  | YES  |     | NULL    |                |
| co3_cargo       | varchar(50)  | YES  |     | NULL    |                |
| co3_empresa     | varchar(59)  | YES  |     | NULL    |                |
| co3_oficina     | varchar(50)  | YES  |     | NULL    |                |
| co3_tel2        | varchar(50)  | YES  |     | NULL    |                |
+-----------------+--------------+------+-----+---------+----------------+
53 rows in set (0.06 sec)

1 个答案:

答案 0 :(得分:0)

评论说这解决了问题:

cursor.execute("SELECT arrendatarios.*, c_cod FROM arrendatarios LEFT JOIN contratos ON arrendatarios.a_cc = contratos.a_cc WHERE a_nombres = %s AND a_apellidos = %s", (nombs, apells))