Это должно часто встречаться программистам, но я никогда не пытался понять это таким образом.
То есть я объясню.Скажем, мне нужно получить значения из таблицы Zoo следующим образом:
@"SELECT z.predator, z.prey FROM Zoo AS z WHERE z.preyType=@carnivore"
Теперь я могу получить все значения в список.Мне нужно отобразить детали этого запроса в сетке.Теперь, получив значения z.predator и z.prey (для целых чисел, т. Е. Их соответствующих идентификаторов), мне нужно заполнить их значимые значения для отображения конечному пользователю (я не могу просто отобразить их идентификаторы).Теперь я могу сделать что-то вроде этого:
foreach (Zoo z in lstZoo)
{
Animal predator = GetFromAnimalTable(z.Predator)
Animal prey = GetFromAnimalTable(z.Prey)
}
Это может замедлить работу программы.Могу ли я запросить все детали за один раз?Примерно так:
SELECT (SELECT * FROM ANIMAL WHERE id=z.predator),
(SELECT * FROM ANIMAL WHERE id=z.prey)
FROM Zoo AS z WHERE z.preyType=@carnivore
При условии, что я могу прочитать значения для нового большего объекта?Или это считается плохой практикой?
ОБНОВЛЕНИЕ: Это стандартная практика для этого?Или рекомендуется заполнять по отдельности, как я указывал вначале?
ОБНОВЛЕНИЕ 2 : Кажется, я совершил ужасную ошибку, отправив запрос не так, как мне было нужно.Я думал, что смогу откорректировать ответы отсюда, чтобы удовлетворить мои требования, увы нет с конструкцией скобок запросов Access.
Вот как мой фактический запрос будет:
SELECT z.predator, p.lifeSpan, z.prey
FROM Zoo AS z
INNER JOIN Plants AS p ON p.parent_id=z.id
WHERE z.preyType=@carnivore
На самом деле яуже был запрос INNER JOIN с другой таблицей.Теперь мне нужно получить (SELECT) значения z.predator (и соответствующих значений из таблицы Animals), p.lifeSpan, z.prey (и соответствующих значений из таблицы Animal), соответствующих условиям INNER JOIN и WHERE.
Псевдокод будет выглядеть так:
SELECT (SELECT * FROM ANIMAL WHERE id=z.predator), p.lifeSpan, (SELECT * FROM ANIMAL WHERE id=z.prey)
FROM Zoo AS z INNER JOIN Plants AS p ON p.parent_id=z.id
WHERE z.preyType=@carnivore
Было бы довольно легко расширить мои требования из ответов здесь, но безуспешно до сих пор.Я пробовал:
SELECT a1.*, p.lifeSpan, a2.*
FROM Zoo AS z
INNER JOIN Plants AS p ON p.parent_id=z.id
INNER JOIN Animal AS a1 ON (a1.id=z.predator)
INNER JOIN Animal AS a2 ON (a2.id=z.prey)
WHERE z.preyType=@carnivore
И много вариантов этого с и без скобок.Как правильно структурировать приведенный выше запрос?