MySQL - Consulta a 4 tablas

 
Vista:

Consulta a 4 tablas

Publicado por Jesus (1 intervención) el 12/06/2020 18:42:12
Buenas, ante todo gracias por intentar ayudarme... Tengo que hacer una consulta de busqueda en la tabla "mails", lo que ocurre que el nombre del idDestinatario lo tengo que obtener de la tabla ya sea cliente, proveedor o personal, entonces hay es cuando me pierdo un poco.

La consulta que tengo cuando es dos tablas (mails, clietnes) es esta:

SELECT mails.*, clientes.empresa FROM mails INNER JOIN clientes ON clientes.id = mails.idDestinatario WHERE mails.asunto LIKE '%f%' OR mails.mensaje LIKE '%f%'

Tabla mails que tiene mail_id - asunto - mensaje - fecha - idDestinatario - tipoDestinatario
Tabla clientes que tiene cliente_id - empresa
Tabla proveedores que tiene proveedor_id - empresa
Tabla personal que tiene personal_id - nombre

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Francisco
Val: 201
Bronce
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Consulta a 4 tablas

Publicado por Francisco (73 intervenciones) el 13/06/2020 18:37:19
Hola


Como no existe o no la veo una relacion destinatario - (empresa-cliente-proveedor) hay que unificarlos, es posible que tengas que ajustar la sentencia por que desconozco el valor de tipoDestinatario

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
WITH destinatarios AS(
	SELECT
		"cliente" tipoDestinatario,
		id idDestinarario,
		empresa AS nombreDestinatario
	FROM clientes
	UNION ALL
	SELECT
		"proveedor" tipoDestinatario,
		id idDestinarario,
		empresa AS nombreDestinatario
	FROM proveedores
	UNION ALL
	SELECT
		"personal" tipoDestinatario,
		id idDestinarario,
		nombre AS nombreDestinatario
	FROM personal
)
SELECT
	m.*, d.nombreDestinatario
FROM mails m
	INNER JOIN destinatarios d
		ON d.tipoDestinatario = m.tipoDestinatario
	   AND d.idDestinatario = m.idDestinatario
WHERE m.asunto LIKE '%f%'
   OR m.mensaje LIKE '%f%'


Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar