此cust_id是外键, ords 返回每个客户的订单数
SELECT cust_name, (
SELECT COUNT(*)
FROM Orders
WHERE Orders.cust_id = Customers.cust_id
) AS ords
FROM Customers
输出是正确的,但我想过滤它以仅检索订单数量少于订单的客户,我不知道如何过滤子查询 ords ,我试过{{ 1}}在代码的末尾,但它不起作用,我尝试在cust_id比较后添加WHERE ords < 2
,但它不起作用。我正在使用MySQL
答案 0 :(得分:0)
使用HAVING子句(并使用连接而不是子查询).....
<ListView x:Name="List" ItemsSource="{Binding}" SelectionChanged="List_SelectionChanged">
<ListView.ItemTemplate>
<DataTemplate>
<Grid Margin="11" Width="460">
<StackPanel Orientation="Vertical" >
<Image Width="100" Height="100"
Source="{Binding Way}"/>
</StackPanel>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
如果您想要包含零订单的人,请将联接更改为外部联接。
答案 1 :(得分:0)
此处不需要相关子查询,因为它计算每行的值,但不会产生“良好”的性能。更好的方法是使用带有join,group by和having子句的常规查询将条件应用于组。
由于您的条件是仅返回少于2个订单的客户,因此left join
而不是inner join
是合适的。它会返回没有订单的客户(计数为0)。
select
cust_name, count(*)
from
customers c
left join orders o on c.cust_id = o.cust_id
group by cust_name
having count(*) < 2