Ошибка во вложенных подзапросах

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 - Неизвестный столбец "adr.adr_id" в разделе "IN/ALL/ANY subquery"

что мне не хватает?

  • 0
    Можете ли вы опубликовать (соответствующие) определения столбцов?
  • 0
    CREATE TABLE IF NOT EXISTS adr ( id VARCHAR (20) сопоставления latin1_german1_ci NOT NULL,) CREATE TABLE IF NOT EXISTS adr_acc ( adr_id VARCHAR (20) сопоставления latin1_german1_ci NOT NULL, acc_type VARCHAR (1) собирать latin1_german1_ci NOT NULL, acc_id VARCHAR (20) collate latin1_german1_ci NOT NULL, adr_id acc_type ( adr_id , acc_type , acc_id )) adr_id acc_type , ЕСЛИ НЕ usr_grp ( usr_id varchar (20) collate latin1_german1_ci NOT NULL, grp_id varchar (20) ЗНАЧИТЬ usr_id grp_id usr_id grp_id ( grp_id )
Теги:
subquery
mysql-error-1054

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

Это правильный запрос.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню