SQL从连接表中选择值,其中显示值和值

时间:2013-05-29 15:11:22

标签: mysql

我有这个MySQL表:

  • 站(id,名称)
  • station_track(id,id_station,id_track)
  • track(id,name)

我希望得到包含A站和B站的所有曲目......我只是想不出来:S我试过这样:

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伙伴们寻求帮助!

3 个答案:

答案 0 :(得分:3)

您的最终条件(station.name="first" AND station.name="second")正在检查一个变量是否同时等于两个不同的值,这些值永远不会评估为真。

如果要查找名称为firstsecond的所有电台,则需要使用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")

答案 1 :(得分:0)

您将需要进行一些思考并重新设计表格。如果要将字段与值列表匹配,可以使用“in”操作

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

以上内容将返回与列表中任何值匹配的所有记录。因此,请考虑如何利用这一点并重新设计架构。

答案 2 :(得分: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