2

解決できない問題があります!(sqlite3ですが、MySqlと同じだと思います)私はそれらのテーブルを持っています(画像):

代替テキストhttp://www.radarkiller.fr/blog/bddprobleme.png

そして、私がstreet_id(例として12と14)を持っている2つの異なる通りに行くすべてのバス路線(タイプと番号を含む)を見つけたいと思います。

結果は、12番通りから14番通りまでの市内のすべてのバス路線(ID、タイプ、番号)を顧客に提供するものとします(例)。

Larry Lustigが言ったように、2つの近隣外部キーを使用してショートカットを作成できます。

よろしくお願いします!

4

2 に答える 2

4

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-09T02:41:00.790 に答える
2

サンプル結果セットに 3 つの個別のレコードが必要であり、すべての "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);
于 2009-10-09T02:43:58.160 に答える