2010-10-12 4 views
0

Я очень смущен функцией подзапроса в MySQL.Ошибка в вложенных подзапросах

Для моего примера я использую 3 таблицы:

адр содержит адреса adr_acc содержит группы или пользователей, которые имеют доступ к адресам usr_grp содержит useres, принадлежащие к группе

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/ЛЮБОГО подзапроса'

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

+0

Можете ли вы разместить (соответствующие) определения столбцов? – Andomar

+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) сопоставления latin1_german1_ci NOT NULL, первичный ключ ('' adr_id', acc_type', 'acc_id') ) CREATE TABLE IF NOT EXISTS 'usr_grp' ( ' usr_id' varchar (20) collate latin1_german1_ci NOT NULL, 'grp_id' varchar (20) collate latin1_german1_ci NOT NULL, ПЕРВИЧНЫЙ КЛЮЧ (' usr_id', 'grp_id') ) –

ответ

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

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