2016-08-20 2 views
0

Я в настоящее время в ходе DBS, и я работаю на вложенное представление:MySQL Инлайн Посмотреть «неизвестные поля»

SELECT userId, firstname, lastname, gender 
FROM 
(SELECT COUNT(dvdId) dvdId, u.userId 
FROM userDVD 
JOIN users u ON userDVD.userId = u.userId 
GROUP BY userId) as T 
WHERE gender = 'F'; 

Когда я запускаю запрос возвращает ошибку неизвестный столбец в списке полей. Если я попытаюсь указать

u.firstname, u.lastname, u.gender 

Я возвращаю ту же ошибку. Есть предположения?

+2

Ваш запрос не имеет смысла. Примеры данных и желаемые результаты помогут передать то, что вы хотите сделать. –

ответ

0

Drew прав, что у вас есть производная таблица T, но я попытаюсь добавить некоторые детали, которые могут быть полезны вам, поскольку вы находитесь в курсе.

  • вы имеете производную таблицу T
  • внешний запрос (сначала выбрать)
  • внутренний запрос (второй выбор в скобках)
  • внутренний запрос использует псевдоним таблицы функции и для пользователей.
  • конечные столбцы внутреннего запроса являются dvdId, который является счетчиком из dvdIds в userDvd таблице и USERID
  • Поскольку внешний запрос ограничен, чтобы использовать конечный набор записей из внутреннего запроса только те 2 колонки доступны, чтобы быть выбрали и видя, что они не включают имя, фамилию или пол, вы получаете ошибку.

Если вы хотите, чтобы ваш запрос был таким же, но чтобы использовать эти столбцы, вы можете присоединиться к вашей производной таблице обратно в таблицу пользователя и получить нужные вам столбцы. Такие, как это:

SELECT userId, firstname, lastname, gender 
FROM 
    (SELECT COUNT(dvdId) dvdId, u.userId 
    FROM userDVD 
    JOIN users u ON userDVD.userId = u.userId 
    GROUP BY userId) as T 
    INNER JOIN users u2 
    ON t.user_id = u2.user_id 
WHERE gender = 'F'; 

Этот метод, чтобы присоединиться обратно к исходной таблице велика, когда вы должны оптимизировать агрегацию, которая находится на большом столе или искать дубликаты или что-то подобное. Однако в вашем случае, если вы на самом деле нужно просто один запрос, объединяющий в себе на все столбцы, которые вы хотите в наборе результатов, таких, как это:

SELECT 
    u.userId, u.firstname, u.lastname, u.gender, COUNT(d.dvdId) as DVDCount 
FROM 
    userDVD d 
    JOIN users u 
    ON d.userId = u.userId 
WHERE u.gender = 'F' 
GROUP BY 
    u.userId, u.firstname, u.lastname, u.gender 
; 
1
SELECT T.userId, T.firstname, T.lastname, T.gender 
FROM (
SELECT users.userId, users.firstname, users.lastname, users.gender 
FROM userDVD 
JOIN users ON userDVD.userId = users.userId 
WHERE gender = 'F' GROUP BY userId 
) as T; 

Я работал через него и оказывается, я не понял, потому что я должен был использовать мой встроенный вид, который мне нужно было указать в исходном элементе select. Эта концепция, к сожалению, не была охвачена в моем курсе. Я ценю тех, кто дал полезные советы против грубых комментариев. Итак, спасибо Дрю и Мэтт

Смежные вопросы