Access 2003 Nested выбирает зуд - PullRequest
0 голосов
/ 24 января 2011

У меня есть запрос, который выглядит так:

SELECT *,
       (SELECT Attribute FROM TableOfAttributes WHERE KeyField = MyTable.KeyField AND Type = "A") AS Attribute1,
       (SELECT Attribute FROM TableOfAttributes WHERE KeyField = MyTable.KeyField AND Type = "B") AS Attribute2,
       (SELECT Attribute FROM TableOfAttributes WHERE KeyField = MyTable.KeyField AND Type = "C") AS Attribute3
FROM
       MyTable

Действительно!В MyTable информация горизонтальна, но в TableOfAttributes она вертикальная, я пытаюсь выяснить, как оторвать эти вложенные запросы, потому что в настоящее время это занимает слишком много времени для выполнения (более часа).на словах: у меня есть таблица с записями, каждая запись имеет атрибуты в другой таблице, каждый атрибут хранится в одной записи, а запись имеет 3 атрибута.

Я хочу показать:

[Entry ID] [Entry Something] [Attribute1] [Attribute2] [Attribute3]

Как вы, ребята, решите это?

Заранее спасибо

Милуд Б.

Ответы [ 2 ]

1 голос
/ 24 января 2011

Вы также можете сделать только один JOIN со своим TableOfAttribute столом и выполнить GROUP BY.

SELECT  [Entry ID], [Entry Something], 
        MIN(CASE WHEN [Type] = 'A' THEN Attribute ELSE NULL END) AS Attribute1,
        MIN(CASE WHEN [Type] = 'B' THEN Attribute ELSE NULL END) AS Attribute2,
        MIN(CASE WHEN [Type] = 'C' THEN Attribute ELSE NULL END) AS Attribute3
FROM MyTable 
LEFT JOIN TableOfAttributes
ON MyTable.KeyField = TableOfAttributes.KeyField
GROUP BY [Entry ID], [Entry Something]
1 голос
/ 24 января 2011

Вы можете просто присоединиться к таблице, используя псевдоним для каждой таблицы.Если есть случаи, когда в одной из таблиц Att не существует совпадения, вам понадобится внешнее соединение.

...