Я новичок в разработке SQL и базы данных и стараюсь работать, если возможно следующее.Oracle: выберите подзапрос и где
У меня есть таблица под названием cats, PKs (cat_id) - это C1, C2, C3 и т. Д. И еще один атрибут с именами кошек (плюс несколько других атрибутов).
У меня есть таблица под названием dog, PKs (dog_id) - это D1, D2, D3 и т. Д. И еще один атрибут с именами собак (плюс несколько других атрибутов).
У меня тогда есть таблица под названием животных, PK 1, 2, 3, 4, 5, 6 и т. Д. С атрибутом Cat_Dog_ID (C1, C2, C3, D1, D2, D3 и т. Д.).
Что я тогда хочу сделать, это оператор выбора, который вернет имена кошек и собак, например.
An_Id - Cat_Dog_ID - Name 1 - C1 - Henry 2 - C2 - Whiskers 3 - C3 - Grey 4 - D1 - Spotty 5 - D2 - Woof 6 - D3 - Max
Чтобы сделать это отдельно, достаточно легко:
SELECT a.an_id, a.cat_dog_id, c.cat_name
FROM animal a, cat c
WHERE a.cat_dog_id = c.cat_id;
SELECT a.an_id, a.cat_dog_id, d.dog_name
FROM animal a, dog d
WHERE a.cat_dog_id = d.dog_id;
Я пробовал множество вещей, чтобы объединить их вместе, и я уверен, что нужно использовать подзапрос/вложенный запрос, например, следующим образом, но Havent были в состоянии получить что-нибудь, чтобы работать до сих пор.
SELECT a.an_id, a.cat_dog_id, c.cat_name "Name"
FROM animal a, cat c
WHERE a.cat_dog_id = c.cat_id
AND (SELECT a.an_id, a.cat_dog_id, d.dog_name "Name"
FROM animal a, dog d
WHERE a.cat_dog_id = d.dog_id);
SELECT a.an_id, a.cat_dog_id FROM animal a
where a.cat_dog_id = c.cat_id in (select c.cat_name "Name" from cat c)
WHERE a.cat_dog_id = d.dog_id in (select d.dog_name "Name" from dog d);
Любые предложения, как это сделать?
Я попробую. Из краткого описания, которое я использовал, вы бы сказали, что оно плохо спроектировано?Будет ли я лучше строить таблицы по-другому? (таблицы собак и кошек нельзя комбинировать из-за разных номеров/типов атрибутов) –
Это зависит от того, как «нормализовать» вы хотите получить и как эти данные будут использоваться в долгосрочной перспективе. Ваше решение работает, но в долгосрочной перспективе оно будет иметь проблемы с масштабированием; но если это всего лишь одно, что вы не ожидаете роста; это может сработать для вас. Вы должны использовать союзы в нескольких местах, где подобные данные в той же таблице устраняют необходимость. – xQbert
Первоначально у меня были кошки и собаки вместе в одном столе, но потом у меня было несколько нулей, и я думал, что несколько таблиц лучше нуля? В любом случае союз работает отлично. Раньше этого не было. спасибо –