when inner from dual mysql where-clause multiple-tables in-subquery

inner - MySQL DONDE<multiple-column> EN<subquery>



select*from table (7)

La respuesta de manurajhada es buena. Si aún decides evitar el JOIN, podrías:

SELECT ... FROM (SELECT id FROM table) subquery, other_table WHERE other_table.col1 = subquery.id OR other_table.col2 = subquery.id

Esto debería hacer que MySQL use el búfer de unión para contener los resultados de la subconsulta.

¿Hay una manera (sin JOIN) de usar la cláusula WHERE en 2 columnas (OR) IN una subconsulta? Actualmente estoy haciendo

WHERE ''col1'' IN ( SELECT id FROM table ) OR ''col2'' IN ( SELECT id FROM table )

Y estoy seguro de que puedo hacerlo mejor :). También probé WHERE (''col1'', ''col2'') IN <subquery> pero MySQL dice: El Operand should contain 2 column(s)

Gracias por tu ayuda.

Edición: Por "No unirse", quiero decir que ya estoy haciendo muchas combinaciones: http://pastebin.com/bRfD21W9 , y como puede ver, las subconsultas están en otra tabla.


Puedes probar debajo de la consulta:

select name from user_details where groupid IN ( select g_id from user_groups ) OR cityid IN ( select c_id from user_cities );

Espero que esto ayude.


También me enfrento a un problema similar

SELECT COUNT(*) FROM msg_old WHERE idfrom IN (SELECT olduserid FROM temp_user) OR idto IN (SELECT olduserid FROM temp_user)

Se me ocurrió una solución

SELECT * FROM msg_old INNER JOIN temp_user ON msg_old.IDFROM = temp_user.olduserid OR msg_old.IDTO = temp_user.olduserid


Vuelve a escribir tu código de esta manera y listo:

WHERE (''col1'', ''col2'') IN ( SELECT id, id FROM table )


Yo leo que no estás de acuerdo con JOIN , pero es solo otra forma de hacerlo. Mira cómo join con friends si te resulta útil.

SELECT `timeline`.`action`, `timeline`.`data`, `timeline`.`tlupdate`, u1.`id` AS ufrom_id, u1.`username` AS ufrom_username, u1.`firstname` AS ufrom_firstname, u1.`lastname` AS ufrom_lastname, u1.`picture` AS ufrom_picture, u2.`id` AS uto_id, u2.`username` AS uto_username, u2.`firstname` AS uto_firstname, u2.`lastname` AS uto_lastname, u2.`picture` AS uto_picture, m.`id` AS m_id, m.`name` AS m_name, m.`alternative_name` AS m_altname, m.`tiny_img` AS m_tiny, m.`normal_img` AS m_normal FROM `timeline` JOIN `users` u1 ON u1.`id` = `timeline`.`user_id_from` JOIN `users` u2 ON u2.`id` = `timeline`.`user_id_to` JOIN `friends` f on f.`idol_id`=u1.`id` or f.`idol_id`=u2.`id` JOIN `movies` m ON m.`id` = `timeline`.`movie_id`;

Actualizar:

Mientras utiliza inner join puede hacer esto también para evitar la condición en el conjunto de resultados completo.

JOIN `friends` f on ((f.`idol_id`=u1.`id` or f.`idol_id`=u2.`id`) and f.idol_id = ?)

Puede usar DISTINCT o usar GROUP BY para obtener un resultado único.


si, tu puedes hacer Es bastante fácil. debe seleccionar el mismo número de columnas en la subconsulta que mencionó en la cláusula where.


SELECT * FROM table WHERE (col_1, col_2) NOT IN (SELECT col_1, col_2 FROM table)