Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 可以用一个查询搜索多个表吗?[MSAccess/SQL Server]_Sql Server_Ms Access - Fatal编程技术网

Sql server 可以用一个查询搜索多个表吗?[MSAccess/SQL Server]

Sql server 可以用一个查询搜索多个表吗?[MSAccess/SQL Server],sql-server,ms-access,Sql Server,Ms Access,所以我的目标是在一个应用程序中有一个搜索字段,可以搜索多个表并返回结果 例如,其中两张桌子是“表演者”和“场地”,还有以下表演者:“约翰·安德鲁斯”、“安德鲁·史密斯”、“约翰·多伊”和以下场地:“圣安德鲁教堂”、“市政厅”。有没有办法返回前两名表演者和搜索“安德鲁”的第一个地点 我的第一个想法是以某种方式将所有表聚合到一个包含三列的表中;“SearchableText”、“ResultType”、“ResultID”。第一列将包含我想要搜索的内容(例如,执行者名称),第二列将显示正在显示的内容

所以我的目标是在一个应用程序中有一个搜索字段,可以搜索多个表并返回结果

例如,其中两张桌子是“表演者”和“场地”,还有以下表演者:“约翰·安德鲁斯”、“安德鲁·史密斯”、“约翰·多伊”和以下场地:“圣安德鲁教堂”、“市政厅”。有没有办法返回前两名表演者和搜索“安德鲁”的第一个地点

我的第一个想法是以某种方式将所有表聚合到一个包含三列的表中;“SearchableText”、“ResultType”、“ResultID”。第一列将包含我想要搜索的内容(例如,执行者名称),第二列将显示正在显示的内容(例如,执行者),第三列将显示项目的ID(注意:为了方便起见,我的所有表都有自动递增的主键)。这个想法的问题是,是否有可能以某种方式动态地执行此操作,或者我是否必须添加代码,以便在每次更新/添加/删除表演者和场馆表中的新行时(可能通过触发器?)自动填充表


我的应用程序是在SQL Server后端之上用MSAccess编写的(我知道,我知道,但我别无选择)。我希望通过MSAccess实现这一点,这样我就不必在我的SQL Server上有一个“searchme”表,但任何好的结果都是可以接受的:)

我想您正在寻找“union”SQL关键字

我想您正在寻找“union”SQL关键字

我会在SQL Server中使用全文索引,有一个包含可搜索文本的表,并在主表中指定链接到搜索表的键。通过这种方式,您可以按相关性对结果进行排序。

我会在SQL server中使用全文索引,创建一个包含可搜索文本的表,并在主表中指定链接到搜索表的键。通过这种方式,您可以根据相关性对结果进行排序。

我认为您有一个模式问题。对工会的质疑几乎总是这方面的证据(尽管并非在所有情况下)

我的问题是:

你的结果是什么

如果您找到一个人,您是否正在显示一个人员列表

或者如果你找到一个场地,一份场地清单

还是两者兼而有之

我想说的是,如果你想返回两者的列表,那么你需要这样的东西:

  SELECT tblPerson.PersonID, tblPerson.LastName & ", " & tblPerson.FirstName, "Person"
  FROM tblPerson 
  WHERE tblPerson.LastName LIKE "Andrew*"
    OR tblPerson.FirstName  LIKE "Andrew*"

  UNION 

  SELECT tblVenue.Venue, tblVenue.Venue, "Venue" 
  FROM tblVenue
  WHERE tblVenue.Venue LIKE "Andrew*"
  ORDER BY Venue
这将提供一个匹配列表,指示哪个是人,哪个是场地,然后允许您选择其中一个并打开详细视图(通过检查第三个字段中的值)

你绝对不想做的是:

  SELECT tblPerson.PersonID, tblPerson.LastName & ", " & tblPerson.FirstName, "Person"
  FROM tblPerson 

  UNION 

  SELECT tblVenue.Venue, tblVenue.Venue, "Venue" 
  FROM tblVenue

然后保存它并尝试在第二列中查询它。这将是极其低效的。您希望WHERE子句位于可以通过索引进行搜索的字段上,这意味着您的联合的每个子查询都需要一个适当的WHERE子句。

我认为您有一个架构问题。对工会的质疑几乎总是这方面的证据(尽管并非在所有情况下)

我的问题是:

你的结果是什么

如果您找到一个人,您是否正在显示一个人员列表

或者如果你找到一个场地,一份场地清单

还是两者兼而有之

我想说的是,如果你想返回两者的列表,那么你需要这样的东西:

  SELECT tblPerson.PersonID, tblPerson.LastName & ", " & tblPerson.FirstName, "Person"
  FROM tblPerson 
  WHERE tblPerson.LastName LIKE "Andrew*"
    OR tblPerson.FirstName  LIKE "Andrew*"

  UNION 

  SELECT tblVenue.Venue, tblVenue.Venue, "Venue" 
  FROM tblVenue
  WHERE tblVenue.Venue LIKE "Andrew*"
  ORDER BY Venue
这将提供一个匹配列表,指示哪个是人,哪个是场地,然后允许您选择其中一个并打开详细视图(通过检查第三个字段中的值)

你绝对不想做的是:

  SELECT tblPerson.PersonID, tblPerson.LastName & ", " & tblPerson.FirstName, "Person"
  FROM tblPerson 

  UNION 

  SELECT tblVenue.Venue, tblVenue.Venue, "Venue" 
  FROM tblVenue

然后保存它并尝试在第二列中查询它。这将是极其低效的。您希望您的WHERE子句位于可以通过索引搜索的字段上,这意味着您的联盟的每个子查询需要有一个适当的WHERE子句。

我将首先尝试联合方法,如果太慢,我会考虑这个方法首先尝试联合方法,如果这太慢了,我会考虑这种方法,如果您的表有任何大小,将导致非常低效的查询,因为它不能使用索引。您最好使用全文索引或编写SQL来查询多个没有联合的表。如果您的表有任何大小,这将导致非常低效的查询,因为它不能使用索引。最好使用全文索引或编写SQL查询多个表而不使用联合。