2015-03-23 4 views
0

Мне нужно подсчитать количество комнат в крыле Воробья. У меня есть таблица для WING и таблица для BEDROOMS. В таблице спальни есть wing_id в качестве внешнего ключа, и у меня возникают проблемы с присоединением к столам.SQL JOINING TABLE QUERY

Это запрос, я попытался так далеко

SELECT BEDROOM_ID, COUNT(*) 
FROM BEDROOMS 
WHERE WING_ID = 
(
    SELECT WING_NAME 
    FROM WING 
    WHERE WING_NAME='SPARROW' 
) 
GROUP BY WING_NAME; 

получаю сообщение об ошибке - не GROUP BY выражения. Кто-нибудь знает, как я могу сделать эту работу?

+2

Я удалил три тега базы данных, заменив их на более общий «sql». Пожалуйста, пометьте вопрос в базе данных, которую вы фактически используете. –

ответ

2

Это должно дать вам типологию в воробье крыле:

SELECT COUNT(*) 
    FROM BEDROOMS B, 
     WING  W 
WHERE W.WING_NAME = 'SPARROW' 
    AND B.WING_ID = W.WING_ID; 

Из того, что вы просите, вы, кажется, не нужна группа по. Причина, однако, вы получаете ошибку, вы пытаетесь выбрать «BEDROOM_ID», однако BEDROOM_ID не находится в вашем предложении GROUP BY.

+2

Если вы собираетесь продемонстрировать соединение, вы должны по крайней мере использовать объединения стиля ANSI-92. –

+0

Удивительно, это здорово, но все равно я могу показать имя крыла, а также счет? –

+0

@Ditto: ошибка заключается в том, что в списке выбора есть что-то в списке, а не в другом месте ... (я думаю, вы уже знаете это и только что смутились на секунду, но кто-то будет прочитав этот ответ где-то вдоль линии) –

1

Вы не можете использовать BEDROOM_ID в предложении SELECT, если это не в предложении GROUP BY. Кроме того, этот запрос не будет работать, так как вы сравниваете WING_ID с WING NAME. Кроме того, я не думаю, что вам нужно использовать GROUP BY для этого подсчета.

SELECT 'SPARROW', COUNT(BEDROOM_ID) 
FROM BEDROOMS INNER JOIN WING 
ON(BEDROOMS.WING_ID = WING.WING_ID) 
WHERE WING_NAME='SPARROW' 
+0

Спасибо! как мне показать название крыла, а также номер комнаты? –

+0

Вы уже знаете название крыла, i'ts 'SPARROW'. нет необходимости выбирать его из базы данных, –

+0

Да, но мне нужен результат, чтобы показать имя крыла, а затем подсчет спальни. –

0

Прежде чем писать запрос, подумайте о том, что вы хотите выбрать и показать. Вы говорите нам, что хотите подсчитать номера в крыле Воробья. Итак, почему вы выбираете bedroom_id в своем запросе? Какой номер спальни вы бы указали на все эти спальни в крыле?

Затем вы выбираете из спален, где идентификатор крыла - это тот, о котором идет речь. Но в подзапросе вы не выбираете идентификатор крыла, но имя крыла (это, конечно, «SPARROW»). Полагаю, это просто опечатка, верно?

Затем вы группируете имя wing_name. Таким образом, вы получаете по одной записи за каждое имя крыла. Но вы выбираете только записи для одного крыла (SPARROW), поэтому предложение GROUP BY ничего не помогает. Кроме того, вы используете его в запросе на спальню, но в таблице спален нет столбца wing_name, поэтому вы не можете группировать его так или иначе.

Вот ваш запрос очищены:

select count(*) 
from bedrooms 
where wing_id = 
(
    select wing_id 
    from wing 
    where wing_name = 'SPARROW' 
); 

Вы также можете выбрать мин (bedroom_id), не более (bedroom_id), буквальный 'ВОРОБЕЙ' и т.д.

Если вы хотите, чтобы выбрать столбцы из таблицы крыла тоже, а затем выбрать из крыла и использовать подзапрос на спален:

select 
    wing_name, 
    wing_size, 
    (select count(*) from bedrooms b where b.wing_id = w.wing_id) as rooms 
from wing w 
where wing_name = 'SPARROW'; 
0

Попробуйте это:

SELECT W.WING_NAME AS WING,COUNT(B.WING_ID) AS BED 
FROM WING W JOIN BEDROOM B 
    ON W.WING_ID=B.WING_ID 
GROUP BY B.WING_ID;