1

私はこのMySQLテーブルを持っています:

  • ステーション(ID、名前)
  • station_track (id、id_station、id_track)
  • トラック (ID、名前)

そして、ステーションAとステーションBを含むすべてのトラックを取得したいのですが...私はそれを理解できません:SIは次のように試しました:

SELECT track.name
FROM track, station_track , station 
 WHERE station.id = station_track.id_station 
  AND track.id = station_track.id_track 
  AND (station.name = 'first' AND station.name = 'second')

うまくいきません...同じ列の値にANDを使用できないと思います。

解決済み:

SELECT proge.ime FROM postaje, postaje_proge, proge
WHERE postaje.id=postaje_proge.ID_postaje AND proge.ID=postaje_proge.ID_proge 
AND postaje.ime_postaje in ("AP Mlinska","City Center")
GROUP BY proge.ime
HAVING count(proge.ime)=2

tnxx みんな助けて!

4

3 に答える 3

3

最後の条件 は(station.name="first" AND station.name="second")、1 つの変数が同時に 2 つの異なる値に等しいことをチェックしており、これは true と評価されることはありません。

firstまたはという名前のステーションをすべて検索する場合は、ステートメントsecondを使用する必要があります。OR

SELECT track.name FROM track, station_track , station 
WHERE station.id=station_track.id_station 
AND track.id=station_track.id_track 
AND (station.name="first" OR station.name="second")
于 2013-05-29T15:15:04.783 に答える
0

少し考えて、テーブルを再設計する必要があります。フィールドを値のリストに一致させたい場合は、「in」操作を使用できます

すなわち

SELECT * FROM station_track WHERE id_track in (1, 2, 3, 4);

上記は、リスト内のいずれかの値に一致するすべてのレコードを返します。したがって、これをどのように利用してスキーマを再設計できるかを考えてください。

于 2013-05-29T15:21:00.083 に答える
0

ステーション A と B の両方にリンクされたトラックが必要であると仮定して、次のことを試してください。

SELECT t.name 
FROM track t
JOIN station_track st on t.id=st.id_track 
JOIN station s on s.id=st.id_station and s.name in ('first','second')
GROUP BY t.name
HAVING count(distinct s.name)=2
于 2013-05-29T15:21:43.787 に答える