Tengo las siguientes dos tablas SQL (en MySQL):
Phone_book
+----+------+--------------+
| id | name | phone_number |
+----+------+--------------+
| 1 | John | 111111111111 |
+----+------+--------------+
| 2 | Jane | 222222222222 |
+----+------+--------------+
Call
+----+------+--------------+
| id | date | phone_number |
+----+------+--------------+
| 1 | 0945 | 111111111111 |
+----+------+--------------+
| 2 | 0950 | 222222222222 |
+----+------+--------------+
| 3 | 1045 | 333333333333 |
+----+------+--------------+
¿Cómo puedo averiguar qué llamadas fueron realizadas por personas que phone_numberno están en el Phone_book? El resultado deseado sería:
Call
+----+------+--------------+
| id | date | phone_number |
+----+------+--------------+
| 3 | 1045 | 333333333333 |
+----+------+--------------+
Cualquier ayuda sería muy apreciada.

SELECT *en la subconsulta. En cambio, por ejemploSELECT 1, debería ser lo suficientemente bonito.Debería eliminar la subconsulta, permitiendo que el optimizador de consultas haga su magia.
Además, evite "SELECCIONAR *" porque puede romper su código si alguien altera las tablas o vistas subyacentes (y es ineficiente).
fuente
1:Nrelación entre sus dos tablas. O agregueDISTINCTcomo se ve en la respuesta de VladoEl siguiente código sería un poco más eficiente que las respuestas presentadas anteriormente cuando se trata de conjuntos de datos más grandes.
fuente
Call, si hay varias filas coincidentesPhone_book. Es decir, si hay una1:Nrelación entre sus dos tablas.LEFT OUTER JOIN, vea si su rendimiento es mejor.Esto devolverá los id-s adicionales que faltan en su tabla Phone_book.
fuente
Yo creo que
fuente
idcolumna de lacalltabla no tiene el mismo valor que laidcolumna de laPhone_booktabla, por lo que no puede unirse a estos valores. Vea la respuesta de WOPR para un enfoque similar.fuente
fuente
Alternativamente,
fuente