La discusión en este punto ha sido entre subconsultas escalares o de columnas, esto es, subcolumnas que retornan un único valor o una columna de valores. Una subconsulta de registro es una variante de subconsulta que retorna un único registro y por lo tanto retorna más de un valor de columna. Aquí hay dos ejemplos:
SELECT * FROM t1 WHERE (1,2) = (SELECT column1, column2 FROM t2); SELECT * FROM t1 WHERE ROW(1,2) = (SELECT column1, column2 FROM t2);
Las consultas aquí son ambas TRUE
si la
tabla t2
tiene un registro en que
column1 = 1
y column2 =
2
.
Las expresiones (1,2)
y
ROW(1,2)
a veces se llaman
constructores de registros. Ambos son
equivalentes. También son legales en otros contextos. Por
ejemplo, los siguientes dos comandos son semánticamente
equivalentes (aunque actualmente sólo puede optimizarse el
segundo):
SELECT * FROM t1 WHERE (column1,column2) = (1,1); SELECT * FROM t1 WHERE column1 = 1 AND column2 = 1;
El uso normal de constructores de registros, sin embargo, es
para comparaciones con subconsultas que retornan dos o más
columnas. Por ejemplo, la siguiente consulta responde a la
petición, “encuentra todos los registros en la tabla
t1
que también existen en la tabla
t2
”:
SELECT column1,column2,column3 FROM t1 WHERE (column1,column2,column3) IN (SELECT column1,column2,column3 FROM t2);
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.