0

我有这些表:

人(pid,姓名,电子邮件,电话,城市)

Ride(rid,pid,date,spots,start,target) [rideID, personID- 提供乘车的人,spots= 乘车中的空位,]

参与(pid,rid)- 人 pid 参与 Ride rid

我必须找到查询 findRidesForUser (pid,date)

这给了我所有建议在 pid 居住的城市开始的特定日期乘车的人的联系方式,例如,ride.start=pid.city。

我正在尝试使用

"SELECT person.name, person.email, person.phone, person.city \
 FROM person WHERE pid=(\
    SELECT pid FROM ride WHERE date='%s' AND \
    ride.start= (SELECT city FROM person WHERE person.pid=pid))"

但它给了我错误:执行查询时出错:错误:用作表达式的子查询返回的不止一行

4

3 回答 3

2

使用 person.pid 和 pid 与说 1=1 是一回事。此外,pid= 意味着您只想要一个结果,但您得到的结果不止一个,因此要么使用 top 或 limit 将子查询限制为一个,要么将 = 更改为“in”。使用 in 并修复子子查询如下:

"SELECT person.name, person.email, person.phone, person.city \
 FROM person WHERE pid in (\
    SELECT pid FROM ride WHERE date='%s' AND \
    ride.start= (SELECT city FROM person as person1 WHERE person.pid=person1.pid))"

我认为这是同一件事

"SELECT person.name, person.email, person.phone, person.city \
 FROM person WHERE pid in (\
    SELECT pid FROM ride WHERE date='%s' AND \
    ride.start= city)"
于 2012-12-04T22:52:31.027 回答
2

您应该希望在适当的键上加入两个表:

SELECT
    p.name,
    p.email,
    p.phone,
    p.city
FROM person p
JOIN ride r
ON (p.pid = r.pid)
WHERE r.date = 'desiredDate'
AND r.start = (SELECT city FROM person WHERE pid = 'userPid')

其中 'desiredDate' 和 'userPid' 是findRidesForUser (pid,date)

于 2012-12-04T23:09:38.770 回答
0

尝试使用“In”而不是使用“=”

于 2012-12-04T22:51:17.527 回答