/ / Fusion de deux requêtes MYSQL. Utiliser une sous-requête avec plusieurs lignes dans une clause where - mysql

Fusion de deux requêtes MYSQL. Utiliser une sous-requête avec plusieurs lignes dans une clause where - mysql

Bien que novice dans les sous-requêtes, je pensais pouvoir fusionner deux requêtes SQL en une seule. Je suis en train de choisir

SELECT tB.Aid AS AID FROM tB JOIN tA ON tB.Aid=tA.id WHERE
tB.somefield=1 AND tA.anyfield=1 GROUP BY tB.Aid

Et puis LOOPING pour chaque ligne résultante avec (AID):

SELECT tB.* FROM tB WHERE tB.Aid=AID

J'ai essayé de fusionner ces requêtes en utilisant:

SELECT tB.* FROM tB WHERE tB.Aid=(SELECT tB.Aid FROM tB JOIN tA ON
tB.Aid=tA.id WHERE tB.somefield=1 AND tA.anyfield=1 GROUP BY tB.Aid)

Mais le message d'erreur est

ce qui était ce que je voulais mais mysql ne peux pas le gérer. Est-il possible d'écrire cela d'une autre manière, en utilisant une seule requête SQL?

Dois-je expliquer davantage mon intention avec ma requête, ou est-ce que ce que j'essaie de faire est clair?

Réponses:

1 pour la réponse № 1

Faites-le légèrement différemment et vous pourrez rejoindre les deux jeux de résultats:

SELECT b1.*
FROM (
SELECT b.Aid AS AID
FROM tB b JOIN tA a ON b.Aid=a.id
WHERE b.somefield=1
AND a.anyfield=1
GROUP BY b.Aid
) sq
JOIN tB b1 ON (b1.Aid = sq.AID)

1 pour la réponse № 2

Utilisation DANS mots clés

    SELECT tB.* FROM tB WHERE tB.Aid IN (SELECT tB.Aid FROM tB JOIN tA ON
tB.Aid=tA.id WHERE tB.somefield=1 AND tA.anyfield=1 GROUP BY tB.Aid)

1 pour la réponse № 3

Tu dois changer where column_name = (SUBQUERY) à where column_name IN (SUBQUERY), mais il serait probablement préférable d’utiliser un JOIN entre les deux requêtes plutôt qu’un IN (du moins dans la plupart des cas).