我有这些表格:
人(pid,姓名,电子邮件,电话,城市)
骑(摆脱,pid,日期,点,开始,目标)[rideID,personID-乘坐的人,斑点=乘坐的开放式插槽,]
参与(pid,rid) - 人pid参加骑车
我必须找到查询 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))"
但它给了我错误: 执行查询时出错:错误:用作表达式
的子查询返回的多行答案 0 :(得分:2)
使用person.pid和pid与说1 = 1是一回事。此外,pid =意味着你只需要一个结果,但是你得到的结果更多,所以要么使用top或limit来将子查询限制为1,要么将=更改为“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)"
答案 1 :(得分: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)
答案 2 :(得分:0)
尝试使用“In”代替使用“=”