una - MySQL selecciona filas que no tienen columna correspondiente en otra tabla
view lenta mysql (3)
Normalmente, utilizará NOT EXISTS
para este tipo de consulta
SELECT p.Name
FROM pooltest p
WHERE NOT EXISTS (SELECT s.Name
FROM senttest s
WHERE s.Name = p.Name)
Una alternativa sería usar un LEFT OUTER JOIN
y verificar NULL
SELECT p.Name
FROM pooltest p
LEFT OUTER JOIN senttest s ON s.Name = p.Name
WHERE s.Name IS NULL
Tenga en cuenta que la sintaxis de unión implícita que está utilizando se considera obsoleta y debe reemplazarse con una unión explícita.
Parece que no puedo entender esto hasta ahora. Intento unir dos tablas y solo seleccionar las filas de la tabla A que no tienen una columna correspondiente en la tabla B. Por ejemplo, supongamos que tenemos una tabla de usuarios y una tabla enviada.
users
tabla de users
tiene las siguientes columnas: id, username
sent
tabla sent
tiene las siguientes columnas: id, username
Quiero seleccionar todas las filas de los users
donde el username
no existe en la tabla sent
. Entonces, si tom
está en users
y en sent
, no será seleccionado. Si está en users
pero no en sent
, será seleccionado. Intenté esto pero no funcionó en absoluto:
SELECT pooltest.name,senttest.sentname
FROM pooltest,senttest
WHERE pooltest.name != senttest.sentname
Prueba este SQL:
SELECT users.username
FROM users
LEFT JOIN sent ON sent.username = users.username
WHERE sent.username IS NULL;
La mejor manera en mi opinión sería:
SELECT users.username
FROM users
LEFT JOIN sent ON sent.id = users.id
WHERE sent.id IS NULL;
Como ambos campos de id, se indexarían (clave principal, habría pensado), esta consulta estaría mejor optimizada que la primera que sugerí.
Sin embargo, es posible que mi primera sugerencia sea mejor para usted, depende de cuáles sean sus requisitos para su aplicación.
Puede ser que este te pueda ayudar ...
También tuve el mismo problema, pero solucioné usando esta consulta
INSERT INTO tbl1 (id,name) SELECT id,name from tbl2 where (name) not in(select name from tbl1);
espero que este solucione tu problema