使用主键和外键的多个选择查询

时间:2014-06-19 09:42:28

标签: sql sql-server

我正在使用SQL Server 2012。

我有两张桌子Sales& CountrySales约有。 15列,其中一列是名为s_id的主键,Country有5列,包含一个也称为s_id的外键。

我想编写一个查询,它只会选择Sales表中的记录,其中s_id在Country表中有多个记录。然后,从此查询返回的列表中执行另一个查询,该查询应仅返回字段usd_value > 0eur_value > 0的行。 usd_valueeur_value都是Sales表中的字段。

以下是一个简短而简单的例子,希望有所帮助。

 Sales 
 s_id       usd_value      eur_value
 MN13       0              5
 MN14       0              0
 MN15       325            125
 MN28       320            0

 Country
 s_id     country
 MN13     NL
 MN13     FR
 MN14     GB
 MN14     US
 MN15     US
 MN28     CA
 MN28     US
 MN28     MX


 Result I would like to see
 s_id     usd_value     eur_value
 MN13     0             5
 MN28     320           0

3 个答案:

答案 0 :(得分:2)

试试这个:

select s.* 
from sales s
where 
(
 s.eur_value > 0
 or 
 s.usd_value > 0
)
and s.s_id
in
(
 select s_id
 from country
 group by s_id
 having count(*) > 1
)

答案 1 :(得分:1)

尝试这样

SELECT
    COUNT(c.[s_id]) Total,
    s.[usd_value],
    s.[eur_value]
FROM Sales s
LEFT JOIN Country c ON c.[s_id] = s.[s_id]
GROUP BY s.[s_id]
HAVING Total > 1
AND (usd_value > 0 OR eur_value > 0)

答案 2 :(得分:1)

试试这个

SELECT S.* FROM
 Sales S JOIN 
       (
         SELECT s_id,Count(s_id) From Country Group By s_id Having Count(s_id) > 1
        ) R On S.s_id = R.s_id
Where S.usd_value > 0 Or S.eur_value >0

<强> Fiddle Demo

输出:

S_ID    USD_VALUE   EUR_VALUE
MN13    0           5
MN28    320         0
相关问题