2010-02-24 7 views
1

У меня есть таблица с именем "адрес", в котором есть:извлечения той же колонке дважды из таблицы

  • ID
  • название
  • PARENT_ID

... поля.

В колонке с заголовком указаны названия регионов и районов. Области имеют значение parent_id, равное нулю, а parent_id районов - это регионы.

Мне нужен запрос, отображающий регионы в одном столбце, а соответствующие округа - в другом столбце.

+0

Не лучше ли иметь таблицу Region и таблицу округов? –

+0

Ваш вопрос действительно не ясен. Имеет ли название как район, так и район? Как? – amarillion

+0

@amarillion - Я думаю, что GJ означает, что у него есть одна таблица, в которой хранятся как регионы, так и районы. Регионы всегда будут иметь parent_id из 0; Район parent_id округа будет идентификатором региона, к которому они принадлежат. В поле заголовка будет сохранено название региона или района, в зависимости от того, что такое «тип» строки. –

ответ

0

использовать что-то вроде следующего:

Select r.Region, s.State 
from 
    (Select id, title as Region from address where parent_id=0) as r, 
    (Select id, title as State, parent_id from address where parent_id>0) as s 
where s.parent_id = r.id 

Сво ANSI SQL. Вы можете настроить его для своих нужд.

+0

ANSI-89. ANSI-92, как вы видите в ответе Грэма, является предпочтительным. –

5

Вы можете присоединиться к таблице на себя, как это:

SELECT 
    R.Title AS Region, 
    D.Title AS District 
FROM 
    address R 
INNER JOIN 
    address D 
    ON 
    D.parent_id = R.id 
    AND 
    D.parent_id > 0 
WHERE 
    R.parent_id = 0 

Однако ваша структура таблицы немного странно, я хотел бы сделать некоторое чтение на нормализации баз данных.

Смежные вопросы