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_number
no 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:N
relación entre sus dos tablas. O agregueDISTINCT
como 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:N
relació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
id
columna de lacall
tabla no tiene el mismo valor que laid
columna de laPhone_book
tabla, por lo que no puede unirse a estos valores. Vea la respuesta de WOPR para un enfoque similar.fuente
fuente
Alternativamente,
fuente