此查询剂量不适用于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
所需输出if(上述查询中的“?”是: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“?”是我在“?”中传递的查询字符串参数我知道这很好。
我的问题是:我不断收到此错误“子查询中不允许操作”
是他们的一个解决方法,我可以在不使用存储过程或使用多个查询的情况下使用它,因为这需要一个单一的查询!
感谢。
答案 0 :(得分:0)
在select子查询中不能返回多于1行。 在这种情况下,您必须使用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不是那么具有代表性。