Probablemente no lo he explicado muy bien en el título, pero tengo dos tablas. Aquí es una versión simple.
channel_data
entry_id channel_id first_name last_name model other_fields
1 4 John Smith
2 4 Jane Doe
3 4 Bill Evans
4 15 235
5 15 765
6 15 543
7 15 723
8 15 354
9 15 976
10 1 xxx
11 2 yyy
12 3 123
channel_titles
entry_id author_id channel_id
1 101 4
2 102 4
3 103 4
4 101 15
5 101 15
6 101 15
7 102 15
8 102 15
9 103 15
10 101 1
11 102 2
12 103 3
No soy capaz de volver a modelar los datos por desgracia.
Necesito una lista de todas las filas con un CHANNEL_ID 15 de channel_data y junto a ellos el nombre apellido apellidos y que tiene el mismo author_id de channel_titles.
Lo que quiero de vuelta es la siguiente:
Model First Name Last Name
---------------------------------
235 John Smith
765 John Smith
543 John Smith
723 Jane Doe
354 Jane Doe
976 Bill Evans
Si el modelo se encontraba en una tabla y nombres fueron en otro esto sería mucho más simple, pero no estoy seguro de cómo hacer esto cuando están en la misma mesa.
========================================
Editado para aclarar.
Necesito conseguir cada modelo con una CHANNEL_ID 15 de channel_data
Para cada modelo que necesito para buscar el entrada_id en channel_titles para encontrar el author_id
Necesito encontrar la fila que tiene que author_id Y CHANNEL_ID 4 en títulos de los canales (cada fila con CHANNEL_ID 4 tiene una única author_id).
Necesito tomar el entrada_id de esta fila de atrás a channel_data y obtener el nombre apellido y last_name para ir con el modelo.
Soy muy consciente de que los datos no se estructura bien pero que es lo que tengo que trabajar. Estoy tratando de llevar a cabo una tarea muy pequeño en un sistema mucho más grande, la remodelación de los datos no es una opción en este momento.
Creo sub-consultas podrían ser lo que estoy buscando, pero esto no es mi área en absoluto por lo general.
Ok, esto es enrevesado. Sin embargo, en base a su descripción, esta consulta debe darle los resultados que desea. El WHERE
y JOIN
descripciones siguen la lógica que ha descrito en su pregunta.
SELECT cd1.model, cd2.first_name, cd2.last_name
FROM channel_data cd1
JOIN channel_titles ct1 ON ct1.entry_id = cd1.entry_id
JOIN channel_titles ct2 ON ct2.channel_id = 4 AND ct2.author_id = ct1.author_id
JOIN channel_data cd2 ON cd2.entry_id = ct2.entry_id
WHERE cd1.channel_id = 15
ORDER BY cd1.entry_id
Salida:
model first_name last_name
235 John Smith
765 John Smith
543 John Smith
723 Jane Doe
354 Jane Doe
976 Bill Evans