【问题标题】:Error in nested subquerys嵌套子查询中的错误
【发布时间】:2010-10-12 14:34:40
【问题描述】:

我对 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”

我错过了什么?

【问题讨论】:

  • 你能发布(相关的)列定义吗?
  • 如果不存在则创建表 adr (id varchar(20) 整理 latin1_german1_ci 不为空,) 如果不存在则创建表 adr_acc (adr_id varchar(20) 整理 latin1_german1_ci 不为空, acc_type varchar(1) collat​​e latin1_german1_ci NOT NULL, acc_id varchar(20) collat​​e latin1_german1_ci NOT NULL, 主键 (adr_id,acc_type,acc_id) ) 如果不存在则创建表 @987 usr_id varchar(20) collat​​e latin1_german1_ci NOT NULL, grp_id varchar(20) collat​​e latin1_german1_ci NOT NULL, PRIMARY KEY (usr_id,grp_id))

标签: mysql subquery mysql-error-1054


【解决方案1】:

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 ']."')
      )
    ))

这是正确的查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多