Problem to join two SELECTs in a single statement

1

I need help with a SQL statement regarding the MySQL database.

The select below returns me data coming from two tables. Use for a search engine I'm developing.

SELECT perfil_usuario_unificado.nome_fantasia
      ,perfil_usuario_unificado.descricao_emp
      ,perfil_usuario_unificado.cnpj
      ,identificacao_acesso.id
  FROM perfil_usuario_unificado
 INNER JOIN identificacao_acesso
    ON perfil_usuario_unificado.id_ia = identificacao_acesso.id
 INNER JOIN b_tag_pesquisa
    ON perfil_usuario_unificado.id_ia = b_tag_pesquisa.id_ia
 WHERE b_tag_pesquisa.tag_pesquisa LIKE ('%WEB%')
 ORDER BY perfil_usuario_unificado.nome_fantasia ASC;

While the select below counts in a given field of the table. Use to count how many "likes" have a certain record.

SELECT COUNT(gostei_nao_gostei) AS quantidade
  FROM interacao_social
 WHERE para_id_ia = '2'
   AND gostei_nao_gostei = '0';
  

Problem:
  I need to join the two select in the same statement, but I do not know how to do it.


The following table schemas follow:

CREATE TABLE 'identificacao_acesso' (
    'id' INT(10) NOT NULL AUTO_INCREMENT,
    'niv' VARCHAR(50) NULL DEFAULT NULL,
    'usuario' VARCHAR(50) NULL DEFAULT NULL,
    'senha' VARCHAR(50) NULL DEFAULT NULL,
    PRIMARY KEY ('id')
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
AUTO_INCREMENT=5
;

CREATE TABLE 'interacao_social' (
    'id' INT(10) NOT NULL AUTO_INCREMENT,
    'de_id_ia' INT(10) NULL DEFAULT '0',
    'para_id_ia' INT(10) NULL DEFAULT '0',
    'gostei_nao_gostei' INT(1) NULL DEFAULT '0',
    'check_in' INT(1) NULL DEFAULT '0',
    PRIMARY KEY ('id')
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=10
;

CREATE TABLE 'b_tag_pesquisa' (
    'id' INT(10) NOT NULL AUTO_INCREMENT,
    'id_ia' INT(10) NULL DEFAULT NULL,
    'tag_pesquisa' VARCHAR(500) NULL DEFAULT NULL,
    PRIMARY KEY ('id')
)
COMMENT='tabela de tag de pesquisa'
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=5
;

CREATE TABLE 'perfil_usuario_unificado' (
    'id' INT(10) NOT NULL AUTO_INCREMENT,
    'id_ia' INT(10) NULL DEFAULT NULL,
    'cnpj' VARCHAR(14) NULL DEFAULT NULL,
    'razao_social' VARCHAR(80) NULL DEFAULT NULL,
    'nome_fantasia' VARCHAR(50) NULL DEFAULT NULL,
    'descricao_emp' VARCHAR(200) NULL DEFAULT NULL,
    'cpf' VARCHAR(50) NULL DEFAULT NULL,
    'nome_pf' VARCHAR(50) NULL DEFAULT NULL,
    'cep' INT(8) NULL DEFAULT NULL,
    'endereco' VARCHAR(50) NULL DEFAULT NULL,
    'complemento_end' VARCHAR(25) NULL DEFAULT NULL,
    'numero_end' VARCHAR(10) NULL DEFAULT NULL,
    'bairro' VARCHAR(25) NULL DEFAULT NULL,
    'cidade' VARCHAR(25) NULL DEFAULT NULL,
    'estado' CHAR(2) NULL DEFAULT NULL,
    PRIMARY KEY ('id')
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
AUTO_INCREMENT=5
;
    
asked by anonymous 02.02.2016 / 02:49

2 answers

1

You have two ways to do this. one is using JOIN and another would be select with SubQuery .

Answers:

  

SubQuery

    SELECT perfil_usuario_unificado.nome_fantasia, perfil_usuario_unificado.descricao_emp,
        perfil_usuario_unificado.cnpj, identificacao_acesso.id,
(select 
COUNT(gostei_nao_gostei) FROM interacao_social
WHERE para_id_ia = '2' AND gostei_nao_gostei = '0'
and  --- aqui tem que haver uma ligação entre as tabelas) AS quantidade

     FROM perfil_usuario_unificado 
     INNER JOIN identificacao_acesso
        ON perfil_usuario_unificado.id_ia = identificacao_acesso.id 
     INNER JOIN b_tag_pesquisa ON perfil_usuario_unificado.id_ia = b_tag_pesquisa.id_ia 
     WHERE b_tag_pesquisa.tag_pesquisa LIKE ('%WEB%') 
     ORDER BY perfil_usuario_unificado.nome_fantasia ASC;

The JOIN in this case would be a little more complicated because you would have to group your data.

Pass more details of the key fields of your tables if you need a better response.

    
02.02.2016 / 11:27
0
SELECT perfil_usuario_unificado.nome_fantasia, perfil_usuario_unificado.descricao_emp,
    perfil_usuario_unificado.cnpj, identificacao_acesso.id,
    COUNT(gostei_nao_gostei) AS quantidade -- segundo select
  FROM perfil_usuario_unificado,
     interacao_social -- segundo select
  INNER JOIN identificacao_acesso
    ON perfil_usuario_unificado.id_ia = identificacao_acesso.id 
  INNER JOIN b_tag_pesquisa ON perfil_usuario_unificado.id_ia = b_tag_pesquisa.id_ia 
  WHERE b_tag_pesquisa.tag_pesquisa LIKE ('%WEB%') 
    AND para_id_ia = '2' AND gostei_nao_gostei = '0'; -- segundo select
 ORDER BY perfil_usuario_unificado.nome_fantasia ASC;
    
02.02.2016 / 10:34