si tenemos dos tablas:
comments
key | value
=================
1 | foo
2 | bar
3 | foobar
4 | barfoo
y:
meta
comment_key | value
=========================
1 | 1
2 | 1
3 | 2
4 | 1
Quiero obtener los comentarios de la tabla comment
que tienen un correspondiente comment_key
en la tabla meta
que tienen unespecífico 10 (la columna value
en la tabla meta
).
Por ejemplo, me gustaría seleccionar todas las filas de la tabla comment
que tienen un value
de 1
en la tabla meta
:
yo esperaría que estos resultados:
key | value
=================
1 | foo
2 | bar
4 | barfoo
Y si tuviera que seleccionar todas las filas de la tabla comment
que tienen un value
de 2
en la tabla meta
:
me esperaba este resultado:
key | value
=================
3 | foobar
Realmente espero que alguien pueda ayudar, gracias a todos por adelantado!
Creo que necesito hacer una unión? Cualquier sugerencia sería genial, y si es posible, una breve explicación para que pueda determinar dónde estaba yendo mal -> así sabré para la próxima vez.
corrección - no importa si se usan predicados 'join',' exists' o 'in', todos son Semi Joins - definidos como combinaciones que devuelven filas de una tabla en función de la existencia de filas relacionadas en otra tabla. –
@JCooper: No lo veo de esa manera. Supongamos que por cada registro en 'parent', hay cero, uno o más registros en' child'. Entonces, una semi unión incluiría cero o una copia de cada registro 'padre', mientras que un SQL 'INNER JOIN' incluiría múltiples copias de algunos registros 'parent'. Pero puedo verlo a tu manera. En el álgebra relacional, una semi unión es equivalente a una unión interna seguida de una proyección apropiada; así que podemos tomar esto como una diferencia entre las proyecciones SQL 'SELECT 'y de álgebra relacional en lugar de entre las combinaciones de SQL' INNER JOIN' y relage-algebra. – ruakh
Guau, estaba tan cerca, ¡solo tenía '=' en lugar de 'IN'! Gracias, funciona un placer! –