SQL-соединение по отношению один-ко-многим
-
19-09-2019 - |
Вопрос
Хорошо, вот мой первоначальный вопрос;
Первая таблица содержит
ID|Name
1 Mary
2 John
Таблица вторая содержит
ID|Color
1 Red
1 Blue
2 Blue
2 Green
2 Black
Я хочу закончить это
ID|Name|Red|Blue|Green|Black
1 Mary Y Y
2 John Y Y Y
Кажется, что, поскольку в первой таблице имеется 11 уникальных значений цвета и тысячи записей в первой таблице, «хорошего» способа сделать это не существует.Итак, еще два вопроса.
Есть ли эффективный способ запроса для получения этого результата?Затем я могу создать перекрестную таблицу в своем приложении, чтобы получить желаемый результат.
ID|Name|Color
1 Mary Red
1 Mary Blue
2 John Blue
2 John Green
2 John Black
Если бы я хотел ограничить количество возвращаемых записей, как бы я мог выполнить запрос, чтобы сделать что-то подобное?
Where ((color='blue') AND (color<>'red' OR color<>'green'))
Итак, используя приведенный выше пример, я бы вернулся
ID|Name|Color
1 Mary Blue
2 John Blue
2 John Black
Я подключаюсь к таблицам Visual FoxPro через ADODB, чтобы использовать SQL.Спасибо!
Решение
Из вашего предыдущего вопроса и запроса на таблицу VFP вы можете получить свои результаты по следующему квалифицированному VFP -запросу ...перекрестная таблица завершена
select
N.ID,
N.Name,
MAX( IIF( C.Color = "Red", "Y", " " )) Red,
MAX( IIF( C.Color = "Blue", "Y", " " )) Blue,
MAX( IIF( C.Color = "Green", "Y", " " )) Green,
MAX( IIF( C.Color = "Black", "Y", " " )) Black
FROM
C_Names N,
Colors C
WHERE
N.ID = C.ID
GROUP BY
N.ID,
N.Name
Затем, поскольку у вас есть другие «цвета», просто скопируйте MAX( IIF()) для этого соответствующего цвета и укажите столбец в качестве имени столбца результата...по той же схеме.Единственная проблема заключается в том, что если у вас другое написание цветов с учетом регистра, вам может потребоваться UPPER( C.Color ) = "RED" (или аналогичное для других цветов).
Другие советы
Вы хотите создать перекрестный запрос.Вы можете попробовать использовать мастер перекрестных запросов:
http://msdn.microsoft.com/en-us/library/aa979431%28VS.71%29.aspx