2009-08-22 92 views
0

我在FRIENDS表中有F.FRIENDID,F.MEMBERID列,在MEMBERS表中有M.MEMBERID,M.FIRSTNAME,M.LASTNAME。我想列出所有登录成员的朋友。这里的问题是,在成员的ID中签名有时可以在FRIENDID表中的FRIENDID行或MEMBERID行中。这是因为当成员添加另一个成员时,他或她的ID被记录在FRIENDID字段中,其中成员的ID被记录在MEMBERID字段中。列出所有朋友

我试过几个SQL查询。都没有工作。我认为这个查询应该可以工作,但是它会给出以下错误。

SQL = "SELECT F.FRIENDID, F.MEMBERID, F.ACTIVE, M.MEMBERID, M.FIRSTNAME, M.LASTNAME, M.ACTIVE" 
SQL = SQL & " FROM FRIENDS F, MEMBERS M" 
SQL = SQL & " WHERE (F.FRIENDID OR F.MEMBERID) = "& Session("MEMBERID") &" AND (F.FRIENDID OR F.MEMBERID) = M.MEMBERID AND F.ACTIVE = 1 AND M.ACTIVE = 1" 
SQL = SQL & " ORDER BY M.FIRSTNAME, M.LASTNAME ASC" 
Set objFriends = objConn.Execute(SQL) 

Microsoft OLE DB提供程序的ODBC驱动程序错误 '80040E14'

[微软] [ODBC SQL Server驱动程序] [SQL Server]将关键字 '或' 附近有语法错误。

回答

1

您需要使用的语法:

WHERE M.MEMBERID IN (F.FRIENDID, F.MEMBERID) 
    AND "& Session("MEMBERID") &" IN (F.FRIENDID, F.MEMBERID) 

下面是我如何使用ANSI联接重写查询:

SELECT f.friendid, 
     f.memberid, 
     f.active, 
     COALESCE(mf.memberid, mm.memberid) 'memberid', 
     COALESCE(mf.firstname, mm.firstname) 'firstname', 
     COALESCE(mf.lastname, mm.lastname) 'lastname', 
     COALESCE(mf.active, mm.active) 'active' 
    FROM FRIENDS f 
    JOIN MEMBERS mf ON mf.memberid = f.friendid AND mf.active = 1 
    JOIN MEMBERS mm ON mm.memberid = f.memberid AND mm.active = 1 
WHERE f.active = 1 
    AND "& Session("MEMBERID") &" IN (f.friendid, f.memberid) 
ORDER BY firstname, lastname 
+0

很好的mod上的sql ...我太懒了......这就是我得到的! :) – klabranche 2009-08-22 23:45:57

1

你不能这样做:SQL中的AND (F.FRIENDID OR F.MEMBERID) = M.MEMBERID

将其更改为:

AND (F.FRIENDID = M.MEMBERID OR F.MEMBERID = M.MEMBERID) 
0

你试试这个?

SQL = SQL & " WHERE (F.FRIENDID = " & Session("MEMBERID") & 
      " OR F.MEMBERID = "& Session("MEMBERID") & 
      ") AND (F.FRIENDID = M.MEMBERID OR F.MEMBERID = M.MEMBERID) "& 
      "AND F.ACTIVE = 1 AND M.ACTIVE = 1" 
0

你需要看的语法SQL表达式 或只能在表达式之间使用

例如 X = Z或Y = Z 不 (X或Y)= Z

所以重做SQL这样的,它应该工作.. 我觉得它有助于做SQL在命令行中嵌入前VB的错误信息可能会更清晰