0

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

person(pid, name,email,phone,city)

ride(rid,pid,date,spots,start,target) [rideID, personID- 乗車する人, spot= 乗車の空きスロット,]

参加する(pid,rid)- pid は、ridid に参加します

クエリ 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= は、結果を 1 つだけ返す必要があることを意味しますが、複数の結果を取得するため、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)"
于 2012-12-04T22:52:31.027 に答える
2

適切なキーで 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 に答える