2012-10-15 59 views
3

我现在不很了解SQL查询,我有一个问题添加一个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) 
+0

你不能在开发代码中做到这一点,或者你必须使用SQL吗?你有没有在MySQL的功能? –

+0

好的,但如何在SQL中做到这一点 –

回答

1

试试这个:

select Person_Ref from Images where Effect_Ref = 2 and Person_Ref IN 
(your first query which gives 2 4 5 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 
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) 
1

JOIN三个表ImagesPersonsRegions代替这些IN S和子查询:

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 
0

有几种方法你可以做到这一点。 您可以像使用IN示例一样使用IN示例,但只有当您只需要一列时才能正常工作(我知道这是您的情况,但如果您遇到需要更多信息的情况,这oncolumn)

的simples将包裹查询到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 

然后哟天亚社与其他查询加盟。但这通常不是一个好方法。

最好apporach,其使用通用表表达式(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 

和你加入它问心无愧任何你需要

0

只需添加并向第一个谓词并指定另一个谓词。

SELECT PERSON_REF FROM IMAGES WHERE PERSON_REF IN(SELECT _PERSON_ID 向个人 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

相关问题