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)