0

この Query Dose は Access 2000 では機能しません

SELECT (Members.First_Name + " " + Members.Last_Name)AS Member,
(SELECT Friend_E_Mail,
FROM    Friends,Members WHERE My_E_Mail = ? and Friend_E_Mail <> ?
UNION ALL
SELECT My_E_Mail,FROM  Friends,Members 
WHERE  Friend_E_Mail = ?and My_E_Mail <> ?) AS  E_Mail ,
(Members.First_Name) AS Name

FROM Members,Friends

サンプル テーブル

Members(all VARCHAR)     SOME DATA
First_Name               Alester Jude Carl Jones
Last_Name                A       B    C    J

FRIENDS(ALL VARCHAR)
My_E_Mail               Alester@lam.com Alester@lam.com  Alester@lam.com
Friend_E_Mail           jude@lam.com    carl@lam.com   jones@lam.com

必要な出力の場合 (上記のクエリの「?」は次のとおりです: jones@lam.com)

+--------------+-----------+------------+
|Member        |E_Mail     |  Name      |
+---------------------------------------+
 Alester A   Alester@lam.com  Alester

望ましい出力 if(上記のクエリの "?" は: Alester@lam.com)

+--------------+-----------+------------+
|Member        |E_Mail     |  Name      |
+---------------------------------------+
 Jude B        jude@lam.com  Jude
 carl C        carl@lam.com  Carl
 Jones J       jones@lam.com Jones

PS「?」「?」で渡すクエリ文字列パラメータです。私はそれがうまくいくことを知っています。

私の質問は次のとおりです。「サブクエリでは操作が許可されていません」というエラーが表示され続けます

これはONE SINGLE QUERYである必要があるため、ストアドプロシージャを使用せずに、または複数のクエリを使用せずに使用できるクエリの回避策ですか!?

ありがとう。

4

1 に答える 1

0

選択サブクエリで複数の行を返すことはできません。この場合、CASE 式を使用する必要があります。

次のようなことをしなければなりません:

SELECT (m.First_Name + " " + m.Last_Name) AS Member,
       case 
       when f1.my_email is null 
        then f2.my_e_mail
        else f1.friend_email 
       end as email,
       m.First_Name AS Name
from members m
left outer join friends f1
  on m.email = f1.my_e_mail
  and f1.friend_e_mail = ?
left outer join friends f2
  on m.email = f2.friend_e_mail
  and f2.my_e_mail = ?;

このようにして、友達ごとに行が返されます。フィールドの名前があまり良くないことがわかります。リファクタリングしてみてください。my_e_mais はそれほど代表的ではありません。

于 2013-05-14T20:31:52.443 に答える