好吧,标题可能看起来很混乱,但是-我需要根据每个用户的电子邮件从sql数据库中选择一个字段。问题是-每个用户可能会多次出现,所以查询很简单
Select Table.Field From Table Where Table.Email='email@email.com'
可能会返回此字段的多行(不要问我为什么,我没有设计系统)。如果我收到多个请求,有什么更好的方法 Table.Email
是谁?
作出选择
Select Table.Field From Table
Where Table.Email='email@email.com'
or
Table.Email='email2@email.com'
or
Table.Email='email3@email.com'
or
...
然后遍历所有结果并控制 Table.Field
对于每个 Table.Email
?
我收到的每封邮件
Select Table.Field From Table Where Table.Email=Email
所以我收到的邮件会有很多。
谢谢你的意见。
3条答案
按热度按时间lvjbypge1#
你的问题很难分析。
例如,您说过可能会为“field”(列)获取多行。但是,每一行的列值是否可以不同?如果是这样的话,你想如何决定你想要哪一个值?
如果您尝试的是基于每个电子邮件参数为“字段”获取单个值,那么您提出的两个解决方案都不能解决上述问题。
t0ybt7op2#
一般来说,最好在数据库中进行批量处理,而不是在应用程序中。原因很简单:每个查询都有准备查询本身和返回结果的开销。多个查询会增加此开销。
第二,如果单独查询每封电子邮件,则可能会为每封电子邮件返回多行,除非查询结构良好。在sql本身中,您可以使用聚合或,
row_number()
,或类似的机制。例如:在某些情况下,您可能希望分别获取每封电子邮件。例如,如果您在每一行上分别运行一个昂贵的操作(例如发送电子邮件),那么将这些操作交错进行可能是有意义的。在这种情况下,“批量”查询的开销更大,因为它需要处理更多的数据,因此通过查找单个电子邮件,到达第一个结果的时间更快。
但是,一般的规则是让数据库对数据做尽可能多的工作。
qoefvg9y3#
你必须使用
IN
子句对多个值进行筛选,