4

SQLクエリについてはあまり詳しくありませんが、問題があります

SELECT PERSON_REF 
FROM   IMAGES 
WHERE  PERSON_REF IN (SELECT _PERSON_ID 
                      FROM   PERSONS 
                      WHERE  REGION_REF = (SELECT _REGION_ID 
                                           FROM   REGIONS 
                                           WHERE  REGION_ABB = "EU")) 
GROUP  BY PERSON_REF 
HAVING Count(PERSON_REF) >= 3 

このクエリは私の結果を次のように与えます

2  
4  
5  
6  

今、私はその結果を他のクエリで使用したい、それを行う方法、ループを作成する必要がありますか、それとも他の方法がありますか

SELECT PERSON_REF 
FROM   IMAGES 
WHERE  EFFECT_REF = 2 
       AND PERSON_REF IN ( 2, 4, 5, 6 ) 
4

6 に答える 6

1
select Person_Ref from Images  where Person_Ref IN ( 
Select _Person_ID from Persons where
Region_Ref in (select _Region_ID from Regions where Region_Abb = "EU"))
and EFFECT_REF = 2 
group by Person_Ref HAVING COUNT(Person_Ref) >= 3
于 2012-10-15T11:56:05.670 に答える
1

これを試して:

select Person_Ref from Images where Effect_Ref = 2 and Person_Ref IN 
( your first query which gives 2 4 5 6)
于 2012-10-15T11:56:10.177 に答える
1

これを試して:

SELECT PERSON_REF 
FROM   IMAGES 
WHERE  EFFECT_REF = 2 
       AND PERSON_REF IN (SELECT PERSON_REF 
                          FROM   IMAGES 
                          WHERE  PERSON_REF IN (SELECT _PERSON_ID 
                                                FROM   PERSONS 
                                                WHERE 
                                 REGION_REF = (SELECT _REGION_ID 
                                               FROM   REGIONS 
                                               WHERE 
                                 REGION_ABB = "EU")) 
                          GROUP  BY PERSON_REF 
                          HAVING Count(PERSON_REF) >= 3) 
于 2012-10-15T11:57:48.193 に答える
1

JOIN3つのテーブルImagesPersonsおよびこれらのサブクエリのRegions代わりに:IN

 SELECT i.Person_Ref 
 FROM Images i
 INNER JOIN Persons p ON i.Person_Ref = p.Person_Ref
 INNER JOIN Regions r ON p.Region_Ref = r.Region_Ref
 WHERE r.Region_Abb = "EU"
   AND i.Effect_Ref = 2 
 GROUP BY i.Person_Ref 
 HAVING COUNT(i.Person_Ref) >= 3
于 2012-10-15T11:59:20.490 に答える
0

それを行うにはいくつかの方法があります。すでに回答されたINの例を使用できますが、必要な列が1つだけの場合にのみ機能します(これはあなたの場合ですが、それ以上必要な状況に直面した場合に何ができるかを知っておくとよいでしょう。 oncolumn)

単純なものは、クエリをparentesysにラップし、エイリアスを指定して、テーブルのように使用できるようにすることです。

(SELECT PERSON_REF 
FROM   IMAGES 
WHERE  PERSON_REF IN (SELECT _PERSON_ID 
                      FROM   PERSONS 
                      WHERE  REGION_REF = (SELECT _REGION_ID 
                                           FROM   REGIONS 
                                           WHERE  REGION_ABB = "EU")) 
GROUP  BY PERSON_REF 
HAVING Count(PERSON_REF) >= 3 ) MY_ALIAS

次に、他のクエリに参加できます。ただし、これは通常、適切なアプローチではありません。

最良のアプローチは、Common Table Expressions(CTE)を使用して、次のようなことを行うことです。

with MY_FIRST_QUERY as(
SELECT PERSON_REF 
    FROM   IMAGES 
    WHERE  PERSON_REF IN (SELECT _PERSON_ID 
                          FROM   PERSONS 
                          WHERE  REGION_REF = (SELECT _REGION_ID 
                                               FROM   REGIONS 
                                               WHERE  REGION_ABB = "EU")) 
    GROUP  BY PERSON_REF 
    HAVING Count(PERSON_REF) >= 3 
)
select MY_FIRST_QUERY.PERSON_REF  

そしてあなたはあなたが必要なものは何でもそれに参加します

于 2012-10-15T12:08:44.297 に答える
0

最初の述部にANDを追加し、別の述部を指定するだけです。

SELECT PERSON_REF FROM IMAGES WHERE PERSON_REF IN(SELECT _PERSON_ID FROM PERSONS WHERE REGION_REF =(SELECT _REGION_ID FROM REGIONS WHERE REGION_ABB = "EU"))AND EFFECT_REF = 2 GROUP BY PERSON_REF HAVING Count(PERSON_REF)> = 3

于 2012-10-16T18:35:40.557 に答える