所以我对数据库和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);
答案 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