sql ms访问按日期和流派选择

时间:2010-08-02 16:46:59

标签: ms-access datetime select

我有两张桌子:

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

我试图按日期和导弹选择。作家应该在“1950”之前出生,而导演应该是“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'

但它不起作用:(

1 个答案:

答案 0 :(得分: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年之前出生的导演“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的主键,那么在WHERE子句中使用ISBN而不是kategori可以获得更好的性能:

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

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

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