MySQL过程查找:如何从不同的表中选择一个特定的命名列

时间:2013-12-15 11:27:18

标签: mysql database phpmyadmin

我想编写一个程序来查找并填写通过许多表搜索的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之后)。

我非常感谢能得到的所有帮助!

1 个答案:

答案 0 :(得分:1)

1052将来自mysql无法分辨哪个表(route,company2.route或company3.route)来自哪个。我不认为mysql支持将表指定为company2.route(其他几个RDBM也可以,但它们的含义不同。)

将每个公司的数据放在一个单独的表中并不是一个好的设计。您应该有一个带有company_id列的路由表,该列引用一个单独的公司表以及该公司的详细信息。这将把你的问题简化为一个合理的陈述。