我有一个我不能解决的问题!(sqlite3,但我认为它与MySql相同)我有这些表(图):
alt text http://www.radarkiller.fr/blog/bddprobleme.png
我想找出去往两条不同街道的所有公交线路(包括类型和编号),我从这两条街道上有street_id (例如12和14 )。
结果将向客户提供城市中从街道n°12到街道n°14 (例如)的所有公交线路( id、类型和编号)。
就像Larry Lustig说的那样,你可以用两个邻居的外键来创建一个捷径。
提前感谢您的帮助!
发布于 2009-10-09 02:41:01
使用GROUP BY/COUNTING:
SELECT t.bus_line_id,
t.bus_line_type,
t.bus_line_number
FROM BUS_LINE t
JOIN LINK_BUS_NEIGBOURHOOD lbn ON lbn.bus_line_id = t.bus_line_id
JOIN LINK_NEIGHBOURHOOD_STREET lns ON lns.neighbourhood_id_ns = lbn.neighbourhood_id_ns
JOIN STREET s ON s.street_id = lns.street_id
WHERE s.street_id IN (12, 14)
GROUP BY t.bus_line_id,
t.bus_line_type,
t.bus_line_number,
s.street_id
HAVING COUNT(DISTINCT s.street_id) = 2使用JOIN:
SELECT t.bus_line_id,
t.bus_line_type,
t.bus_line_number
FROM BUS_LINE t
JOIN LINK_BUS_NEIGBOURHOOD lbn ON lbn.bus_line_id = t.bus_line_id
JOIN LINK_NEIGHBOURHOOD_STREET lns ON lns.neighbourhood_id_ns = lbn.neighbourhood_id_ns
JOIN STREET s ON s.street_id = lns.street_id
AND s.steet_id = 12
JOIN STREET s2 ON s2.street_id = lns.street_id
AND s2.steet_id = 14发布于 2009-10-09 02:43:58
假设您希望在示例结果集中有三个单独的记录,并假设所有"neighborhood_id“列都是FK返回到邻居表,请尝试:
SELECT *
FROM bus_line
WHERE EXISTS (SELECT *
FROM neighborhood N
INNER JOIN link_neighborhood_street S ON N.neighborhood_id = S.neighborhood_id_ns
WHERE S.street_id = 12)
AND EXISTS (SELECT *
FROM neighborhood N
INNER JOIN link_neighborhood_street S ON N.neighborhood_id = S.neighborhood_id_ns
WHERE S.street_id = 14);https://stackoverflow.com/questions/1541523
复制相似问题