Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL以限制1连接多个表_Sql_Postgresql_Join - Fatal编程技术网

SQL以限制1连接多个表

SQL以限制1连接多个表,sql,postgresql,join,Sql,Postgresql,Join,我有三张桌子: **clientes** cli_clientes nome 50 A 52 B **telefones_cliente** cli_cliente tel_telefone 50 387 50 386 50 385 52 400 **telefones** tel_telefone tel_contato 385 RODOLFO - COMPR

我有三张桌子:

**clientes**
cli_clientes nome
50            A
52            B

**telefones_cliente**
cli_cliente tel_telefone
50          387
50          386
50          385
52              400


**telefones**
tel_telefone    tel_contato
385 RODOLFO - COMPRAS
386 SONIA CONTAS A PAGAR RAMAL 201
387 VANESSA CONTABILIDADE RAMAL 202
388 (null)
389 (null)
我需要客户的结果,只需要telefones_客户的第一次匹配,再加上telefones的tel_contato。 我只是做了很多尝试,所以我需要帮助,我最后一个不工作的SQL:

SELECT
c.cli_cliente
,cli_razao_social,
tc.tel_telefone
--  ,telefones.tel_contato
  FROM
    clientes c
  JOIN telefones_cliente tc ON c.cli_cliente = (SELECT tc.cli_cliente FROM telefones_cliente, clientes c2, telefones t WHERE c2.cli_cliente=tc.cli_cliente AND tc.tel_telefone=t.tel_telefone LIMIT 1)
我得到的是:

cli_cliente cli_razao_social    tel_telefone
50  EXACTA ENGENHARIA E ADMINISTRAÇAO LTDA  385
50  EXACTA ENGENHARIA E ADMINISTRAÇAO LTDA  386
50  EXACTA ENGENHARIA E ADMINISTRAÇAO LTDA  387
我需要的是:

cli_cliente cli_razao_social    tel_telefone
49  WOOD FORM LTDA  384
50  EXACTA ENGENHARIA E ADMINISTRAÇAO LTDA  387

您可以使用分组方式,如下所示:

select clientes.cli_clients, nome , tel_telefone, tel_contato from clientes
inner join telefones_cliente on (clientes.cli_clientes =telefones_cliente.cli_cliente)
inner join telefones on (telefones_cliente.tel_telefone =telefones.tel_telefone)
group by clientes.cli_clients

它只为每个客户端返回一条记录

使用“top 1”仅获取第一次出现的记录

试试这把SQL小提琴

这是我使用的查询。给出了预期的结果

select  A.clientid,B.telephone,C.Name 
from Client A inner join ClientTelephone B on A.clientid = B.clientid
inner join Telephone C on B.telephone = C.Telephone
limit 1

您当前的结果和预期的结果都包括名称、标识符,甚至是示例数据中没有的列名,这使得很难看到您试图说明的内容。这不起作用,这是我第一次尝试。Postgres要求“按客户分组。客户、电话号码。电话号码”在Postgres末尾使用限制1,而不是top1