2010-08-02 91 views
0

选择我有两个表:MS SQL访问日期和流派

fID Enamn Fnamn bdate 
1 Ronge Paus 49-05-14 
2 Nesser Håk 50-07-26 
3 Bods Thomas 51-05-02 

而且

ISBN  cathegory 
123 Prosa 
456 Poesi 
789 Thriller 

我想按日期和cathegory选择。笔者shoult前一年 “1950年” 出生和cathegory应该是 “Poesi”

结果应该是:

ISBN cathegory fID Enamn Fnamn bdate 
456 poesi  1 Ronge Paus 49-05-14 

我已经试过跟随着:

SELECT * 
FROM bok, författare 
WHERE bdate BETWEEN #01/01/40# AND #01/01/50# AND kategori = 'poesi' 

但它没't work :(

+0

是在Ronge记录在第二个表中与Poesi记录相关的第一个表中? – 2010-08-02 17:10:19

回答

1

您需要一种方法将第一个表中的记录与第二个表中的类别进行匹配我假定ISBN是第二个表中的主键,因此将其用作外键在第一个表格中。

我对表名不清楚,所以我用自己的名字替换了。注意我还假定bdate是日期/时间数据类型。下面是我的表的版本是这样的:

TBLA:

fID Enamn Fnamn bdate  fkey_ISBN 
1 Ronge Paus 49-05-14 456 
2 Nesser Håk 50-07-26 123 
3 Bods Thomas 51-05-02 789 

TBLB:

ISBN cathegory 
123 Prosa 
456 Poesi 
789 Thriller 

然后,为了获得1950年之前出生的cathegory “Poesi” 的作家,使用此查询:

SELECT 
    a.fkey_ISBN, 
    b.cathegory, 
    a.fID, 
    a.Enamn, 
    a.Fnamn, 
    a.bdate 
FROM 
    tblA AS a 
    INNER JOIN tblB AS b 
    ON a.fkey_ISBN = b.ISBN 
WHERE 
    a.bdate < #1950/01/01# 
    AND b.kategori = 'poesi'; 

编辑:如果ISBN其实TBLB的主键,您可以通过,而不是驾驶员学校使用ISBN得到更好的性能你的WHERE子句:

WHERE 
    a.bdate < #1950/01/01# 
    AND b.ISBN = 456 

,或者如果IBSN是文本,而不是数字数据类型:

WHERE 
    a.bdate < #1950/01/01# 
    AND b.ISBN = '456' 
+0

感谢您的回答。我会回到ASA,我看到这个答案之前,从旧版本的旧版本中退出。 – jdnhldn 2010-08-03 14:53:58