在单个查询中选择多个表

时间:2010-03-21 11:24:37

标签: sql ms-access

我在MS Access中有5个表

Logs [Title, ID, Date, Author]
Tape [Title, ID, Date, Author]
Maps [Title, ID, Date, Author]
VCDs [Title, ID, Date, Author]
Book [Title, ID, Date, Author]

我通过此代码尝试了我的关卡

SELECT Logs.[Author], Tape.[Author], Maps.[Author], VCDs.[Author], Book.[Author]
FROM Logs
   , Tape
   , Maps
   , VCDs, Book
WHERE ((([Author] & " " & [Author] & " " & [Author] & " " & [Author]& " " & [Author])        
Like "*" & [Type the Title or Any Part of the Title and Press Ok] & "*"));

我想在一个查询中选择所有这些字段。假设有Adam作为所有表中作品的作者。所以,当我把Adam放在搜索框中时,它应该来自所有表格。

我知道这可以通过使用单个表或重命名字段名称来完成,但这不是必需的。

请帮忙。

3 个答案:

答案 0 :(得分:5)

我是lexu和Trevor Tippins所建议的,这些将解决您当前的问题。

不过,请重新检查一下您重新设计表格的态度。使用UNION查询作为应用程序的核心部分是数据库设计中问题的一个指标。

如果你的应用程序经常适用于所有五个表,那么我会说数据库模型应该显示出来。此外,UNION查询的性能并不是很好,特别是在MS Access中,您将获得其他惩罚,例如不可更新的结果集。

如果您有另一个名为Media的表,它将保存五个表中的所有公共字段以及媒体类型,您仍然可以为每个具有特定字段的特定媒体提供表格,并通过主媒体表格引用的ID。

在数据库和应用程序变得过于复杂之前,请确保理解所提到的所有概念,例如here,因为重新设计会影响所有查询,表单和代码,之后它会发生越多的工作需要。

答案 1 :(得分:4)

你可以试试这个:

   select 'Logs', Title, ID, Date, Author from Logs where Author like 'Adam'
union
   select 'Tape' ,Title, ID, Date, Author from Tape where Author like 'Adam'
union
   select 'Maps',Title, ID, Date, Author from Maps where Author like 'Adam'
union
   select 'VCDs', Title, ID, Date, Author from VCDs where Author like 'Adam'
union
   select 'Book', Title, ID, Date, Author from Book where Author like 'Adam'

或更好甚至你可以创建一个视图来“联合”表格,然后从视图中选择。

答案 2 :(得分:2)

尝试创建UNIONS所有表的新查询,然后更改现有查询以从中选择,而不是单独从每个基础表中进行选择。如下所示:

SELECT * 
  FROM NewUnionQuery 
 WHERE NewUnionQuery.Title LIKE "*" & [Enter a Title] & "*";

另外,请阅读一本关于SQL的好书并阅读它。