【问题标题】:SQL JOIN multiple tables with limit 1SQL JOIN 多个表,限制为 1
【发布时间】:2018-07-11 19:14:42
【问题描述】:

我有 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

【问题讨论】:

  • 您当前的结果和预期的结果都包括名称、标识符,甚至是未出现在示例数据中的列名,这使得您很难看到您想要说明的内容。

标签: sql postgresql join


【解决方案1】:

你可以像这样使用 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

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

【讨论】:

  • 它不起作用,这是我第一次尝试。 Postgres requeri a 'group by clientes.cli_cliente, telefones.tel_telefone'
【解决方案2】:

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

试试这个 SQL Fiddle 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

【讨论】:

  • 在 postgres 的末尾使用 limit 1 而不是 top1
猜你喜欢
  • 2014-06-03
  • 2012-08-06
  • 2010-10-04
  • 2018-12-03
  • 1970-01-01
  • 1970-01-01
  • 2015-01-19
  • 2020-08-06
  • 2021-03-27
相关资源
最近更新 更多