【发布时间】:2012-10-13 05:21:59
【问题描述】:
如果我们需要根据给定列的某些值集查询表,我们可以简单地使用 IN 子句。
但是如果需要基于多列进行查询,我们不能使用IN子句(在SO线程中grepped。)
从其他 SO 线程,我们可以使用连接或存在子句等来规避这个问题。但是如果主表和搜索数据都在数据库中,它们都可以工作。
E.g
User table:
firstName, lastName, City
给定 (firstname, lastName) 元组的列表,我需要获取城市。
我可以想到以下解决方案。
1
构造一个选择查询,例如,
SELECT city from user where (firstName=x and lastName=y) or (firstName=a and lastName=b) or .....
2
将所有 firstName、lastName 值上传到临时表中,并在“用户”表和新临时表之间执行连接。
有没有解决这个问题的选项?一般来说,解决这个问题的首选是什么?
【问题讨论】:
-
您也可以连接字段。
-
哪个 RDBMS?不同的 RDBMS 有不同的能力。例如,Oracle 可以做到
WHERE (Field1, Field2) = ('a', 'b'),但 MySQL 不能。 [典型的方法是将列表作为字符串或 xml 提供,使用函数将其转换为数据集,然后加入该数据集。] -
您的名字和姓氏现在在哪里?电子表格? csv?
-
firstName 和 lastName 值将作为简单 List 传递给框架。
-
@Htaras 什么框架?它是.net List
吗?你是如何连接到数据库的?还有什么版本的SQL? SQL Server、Oracle、MySql?