Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL WHERE<;多列>;在<;子查询>;_Mysql_Where Clause_Multiple Tables_In Subquery - Fatal编程技术网

MySQL WHERE<;多列>;在<;子查询>;

MySQL WHERE<;多列>;在<;子查询>;,mysql,where-clause,multiple-tables,in-subquery,Mysql,Where Clause,Multiple Tables,In Subquery,有没有一种方法(不带JOIN)可以在子查询中的两列(或)上使用WHERE子句? 目前,我正在做 WHERE 'col1' IN ( SELECT id FROM table ) OR 'col2' IN ( SELECT id FROM table ) 我相信我能做得更好:)。我也尝试了中的WHERE('col1','col2'),但是MySQL说:操作数应该包含2列。 谢谢你的帮助 编辑:所谓“无联接”,我的意思是我一直在进行许多联接:,如您所见,子查询位于另一个表中。是的,

有没有一种方法(不带JOIN)可以在子查询中的两列(或)
上使用
WHERE
子句? 目前,我正在做

WHERE 'col1' IN
(
    SELECT id FROM table
) OR 'col2' IN
(
    SELECT id FROM table
)
我相信我能做得更好:)。我也尝试了
中的WHERE('col1','col2'),但是MySQL说:
操作数应该包含2列。

谢谢你的帮助


编辑:所谓“无联接”,我的意思是我一直在进行许多联接:,如您所见,子查询位于另一个表中。

是的,您可以这样做。这很容易。您必须在子查询中选择与where子句中提到的相同数量的列。

像这样重写代码,您就可以开始了:

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

您可以尝试以下查询:

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

希望这对你有所帮助。

我知道你不同意加入
,但这只是另一种方式。。如果对您有用,请参阅
join
with
friends

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`;
更新: 在使用
内部联接时
也可以这样做,以避免出现完整结果集的情况

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

您可以使用
DISTINCT
或使用
GROUP BY
来获得唯一的结果。

Manurajada的答案很好。如果您仍然决定避免加入,您可以:

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

这将使MySQL使用连接缓冲区来保存子查询的结果。

我也面临类似的问题

SELECT *
FROM table

WHERE 
(col_1, col_2) NOT IN
 (SELECT col_1, col_2 FROM table)
SELECT COUNT(*) FROM msg_old WHERE idfrom IN 
    (SELECT olduserid FROM temp_user)
    OR
    idto IN (SELECT olduserid FROM temp_user)
我想出了解决办法

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

任何例子都会更好!!我想,他的意思是@martinkhquery(下面)为什么不加入?有什么特别的原因吗?这是因为我已经加入了很多。我已经更新了我的原始帖子,添加了我当前查询的摘录。只有3个连接,我不是说有很多连接。。我建议你再加入一次,而不是进行内部查询。你能给我一些建议吗?我不知道如何添加它,因为有一个“或”的概念,而不是“=”:/我注意到了你的问题,即使我也在寻找另一种方法,如果有人可以建议,但是。。尚未找到。可能会有帮助,但子查询是相同的。我需要比你的查询更简单的东西,这是我当前的查询。它比我需要的更接近。但是
('col1','col2')
的意思是“和”,我需要的是“或”^^更接近我需要的。事实上,我不是那么封闭(^^^),我想知道不加入是否可能。我不是SQL高手,所以谢谢你的帮助。我已经添加了你的加入和一个
WHERE idol_id=?
来过滤它们,但是我有很多次相同的行(12次,完全相同的答案):/你知道如何避免重复吗?(我知道关键字
DISTINCT
,但我认为如果我使用它,这将是一个黑客行为)我想要的数据是
f.idol\u id其中f.fan\u id=?
,所以我认为将
f.idol\u id=?
重写为
f.fan\u id=?
就足够了?这应该是公认的答案。