Mysql 其中[1个值]在[1个值]中

Mysql 其中[1个值]在[1个值]中,mysql,subquery,in-subquery,Mysql,Subquery,In Subquery,我有以下疑问: SELECT A.id FROM logsen_alertes A WHERE ( SELECT LA2.type_colocation_id FROM logsen_liaisons_annonces_types_colocations LA2 WHERE LA2.annonce_id = 25 AND LA2.annonce_type = 4 ) IN ( SELECT L4.souhait FROM logsen_liaisons_alertes_souh

我有以下疑问:

SELECT A.id FROM logsen_alertes A
WHERE  
( SELECT LA2.type_colocation_id
  FROM logsen_liaisons_annonces_types_colocations LA2
  WHERE LA2.annonce_id = 25 AND LA2.annonce_type = 4
) 
IN
( SELECT L4.souhait
  FROM logsen_liaisons_alertes_souhaits L4
  WHERE L4.alerte_id = A.id
)
当我的第一个子查询仅返回1个值时,此查询工作正常,因为在()中就是这样工作的,在一组值中查找1个唯一的值。当我的第一个子查询返回2个或更多值时,MySQL将返回我“子查询返回超过1行”。当第一个子查询返回多个值时,如何使查询工作?类似于“我在[ny of the values]中找到[any of the values]的地方”?

试试:

SELECT DISTINCT A.id FROM logsen_alertes A
JOIN logsen_liaisons_alertes_souhaits L4 ON L4.alerte_id = A.id
JOIN logsen_liaisons_annonces_types_colocations LA2
  ON LA2.type_colocation_id = L4.souhait AND LA2.annonce_id = 25 AND LA2.annonce_type = 4
试试这个:

SELECT 
        A.id 
FROM 
        logsen_alertes A
        INNER JOIN logsen_liaisons_alertes_souhaits L4
               ON L4.alerte_id = A.id
        INNER JOIN logsen_liaisons_annonces_types_colocations LA2
               ON LA2.type_colocation_id = L4.souhait 
WHERE 
         LA2.annonce_id = 25 AND LA2.annonce_type = 4  

应该有效

就像一个符咒。我更喜欢这个答案而不是另一个答案,因为我听说每个查询限制都应该放在WHERE而不是JOIN中。@user2083586-不知道你在哪里听到过这种胡说八道。请从您的脑海中删除它-这是一个古老的学校,我不明白为什么您将“LA2.annonce_id=25和LA2.annonce_type=4”放在WHERE语句中,而不是放在JOIN语句中。你能澄清一下这个选择吗?@VaN-因为这是一个没有将两个表链接在一起的子句。只是一个表上的谓词。
SELECT DISTINCT A.id FROM logsen_alertes AS A
INNER JOIN logsen_liaisons_alertes_souhaits AS L4
        ON (L4.alerte_id = A.id)
INNER JOIN logsen_liaisons_annonces_types_colocations AS LA2
        ON (LA2.type_colocation_id = L4.souhait)
WHERE LA2.annonce_id = 25 AND LA2.annonce_type = 4