0

我对 MySQL 中的子查询功能感到非常困惑。

对于我的示例,我使用 3 个表:

adr 包含地址 adr_acc 包含有权访问地址的组或用户 usr_grp 包含属于某个组的用户

select * from adr where 
adr.adr_id in
  (select ac1.adr_id from adr_acc as ac1 where
    (
      (ac1.acc_type = 'U' and ac1.acc_id = '".$s['user']."') or
      (ac1.acc_type = 'G' and ac1.acc_id in
        (select ug1.grp_id from usr_grp as ug1 where ug1.usr_id = '".$s['user']."')
      )
    )
  )

我收到一个错误:

1054 - 'IN/ALL/ANY 子查询'中的未知列'adr.adr_id'

我错过了什么?

4

1 回答 1

0

ARGGGGGGGGGGGGGG - 我很愚蠢,很抱歉问了这样一个非常愚蠢的问题。

SELECT * 
FROM adr 
WHERE adr.id IN(
  SELECT ac1.adr_id
  FROM adr_acc AS ac1 
  WHERE (
      ( ac1.acc_type = 'U' AND ac1.acc_id = '".$s[' USER ']."' ) 
      OR (ac1.acc_type = 'G' AND ac1.acc_id IN (SELECT ug1.grp_id FROM usr_grp AS ug1 WHERE ug1.usr_id = '".$s[' USER ']."')
      )
    ))

这是正确的查询。

于 2010-10-12T15:20:42.610 回答