SQL JOIN有限制的多个表1

时间:2018-07-11 19:14:43

标签: sql postgresql join

我有3张桌子:

**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_cliente的第一个匹配项,以及来自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

2 个答案:

答案 0 :(得分:0)

您可以使用group by,例如:

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

每个客户仅返回一条记录

答案 1 :(得分:0)

使用“ top 1”仅获得第一次出现

尝试使用此SQL提琴http://sqlfiddle.com/#!15/a0b4c/3

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

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