生成SQLite结果

时间:2014-04-02 19:35:43

标签: sql database sqlite database-design

所以我对数据库和SQLite都是全新的,我有一个非常简单的问题。 如果我要创建一个包含以下表格和数据的数据库,我将如何生成一个结果集,该结果集将为我提供一个表格,其中包含与其每个场地对齐的所有事件?具体来说,什么是SQLite查询?非常感谢!

create table if not exists venues(
          venueId integer primary key not null, --auto increment key 
          capacity int, 
          country text, 
          street text, 
          city text  
    );

create table if not exists hostedAt(
      venueId integer not null,
      eventId integer not null
);

create table if not exists events(
      eventId integer primary key not null, --auto increment key 
      time int, 
      name text,  
      price text,
      eventDate text, 
      type text

);

insert into events(time, name, price, eventDate, type) values (4 , 'Bluesfest' , '$300' , 'July 4', 'Concert');
insert into events(time, name, price, eventDate, type) values (4 , 'Folk Fest' , '$200' , 'August 14', 'Concert');
insert into events(time, name, price, eventDate, type) values (4 , 'Rave Fest' , '$100' , 'May 10', 'Rave');

insert into venues(capacity, country, street, city) values (1000, 'Canada', 'Lebreton Flats', 'Ottawa');
insert into venues(capacity, country, street, city) values (300, 'Canada', 'Bank Street', 'Ottawa');

insert into hostedAt(venueId, eventId) values (1,1);
insert into hostedAt(venueId, eventId) values (1,2);
insert into hostedAt(venueId, eventId) values (2,3);

2 个答案:

答案 0 :(得分:1)

select * -- or just the fields that you require.
from       events ev
inner join hostedAt ho
on         ho.eventId = ev.eventId
inner join venues ve
on         ve.venueId = ho.venueId

在您的示例中,当您自动增加ID字段的填充与手动填充hostedAt表不匹配时,我发现问题出现了。 或者只是为了让你的例子变得简单?

因此,当您在事件或场地中插入值时,您必须捕获插入的ID以在table hostedAt的插入中使用它们。

答案 1 :(得分:1)

您需要使用中间锁定表加入所有3个表。

您的查询将如下

SELECT e.*
       ,v.*
    FROM events as e
    JOIN hostedat as h
        ON e.eventid = h.eventid
    JOIN venues as v
        ON h.venueid = v.venueid