2012-12-04 31 views
0

返回我有這些表的多個行:由子查詢中簡單的SQL

人(PID,姓名,電子郵件,電話,市)

騎(RID,PID,日期,地點,開始,目標)rideID,personID-誰給坐,點=開放的插槽中搭乘的人,]

參與(PID,去掉) - 人在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))" 

但它給我的錯誤: 錯誤執行查詢:ERROR:由作爲表達式的子查詢返回多行

+0

的輸入參數是你實驗值從子查詢中得到多個結果? – MadHenchbot

+0

如果我很好地理解你想要的:最簡單的方法是在ride.start = person.city上使用左連接結構 – Newben

回答

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)

0

嘗試使用「在「而不是使用」=「

2

使用person.pid和pid與說1 = 1是一樣的。另外,pid =意味着你只希望返回一個結果,但是你得到的結果多於一個,因此要麼使用top或limit來限制子查詢爲1,要麼將=改爲'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)"