我想编写一个程序来查找并填写通过许多表搜索的ID。 考虑一下:一个城市有三个不同的公交公司,在不同的时间有不同的路线。对于我作为客户,只要我的时间偏好得到满足,我不介意我选择哪一个。我想在一个查询中搜索所有三家公司,找到最符合我愿望的公司。
这是我尝试过的:
CREATE PROCEDURE book_fixed_route(
IN pnr VARCHAR(100),
IN source INT(11),
IN dest INT(11),
IN start_time TIME,
IN frequency CHAR(7),
IN start_date DATE,
IN end_date DATE)
INSERT INTO booking
VALUES (pnr,
(SELECT ID
FROM route r, company2.route j , company3.route m
WHERE (r.source = source AND r.starttime = start_time)
OR (j.source = source AND j.starttime = start_time)
OR (m.source = source AND m.starttime = start_time)),
(SELECT vehicleID
FROM route r, company2.route j , company3.route m
WHERE (r.source = source AND r.starttime = start_time)
OR (j.source = source AND j.starttime = start_time)
OR (m.source = source AND m.starttime = start_time)));
所有公司的路线表看起来完全相同,我写的预订表采用pnr,route_id和vehicle_id。
上面的代码给出了错误代码1052,我认为它是因为我没有指定应该选择ID或vehicleID的公司(在SELECT之后)。
我非常感谢能得到的所有帮助!
答案 0 :(得分:1)
1052将来自mysql无法分辨哪个表(route,company2.route或company3.route)来自哪个。我不认为mysql支持将表指定为company2.route(其他几个RDBM也可以,但它们的含义不同。)
将每个公司的数据放在一个单独的表中并不是一个好的设计。您应该有一个带有company_id列的路由表,该列引用一个单独的公司表以及该公司的详细信息。这将把你的问题简化为一个合理的陈述。