Подсчет записей из отображаемой таблицы - это одно, но не другое: MYSQL - PullRequest
1 голос
/ 04 марта 2011

У меня есть две простые таблицы

пользователи

+----+--------+-----------+
| id | gender | birthdate |
+----+--------+-----------+

userpreference

+----+------------------+-----------------+
| id | preference value | preference type |
+----+------------------+-----------------+

Вопрос:

Я хочу опросить всех людей, которые не перечислили конкретное значение предпочтения, например, «покупки». Сюда входят также все люди, которые не указали ни одного типа предпочтения, так что столбец может быть нулевым, однако, поскольку столбец пользовательской настройки «id» называет пользователей внешним ключом, я также хочу включить в свой подсчет всех людей, которые не отображаются во второй таблице (предпочтения пользователя)?

Общее количество людей, которые не имеют значения предпочтения «покупки» в качестве значения предпочтения:

Вот что я пробовал:

SELECT
(
SELECT COUNT(DISTINCT userpreference.id) FROM userpreference
WHERE  preferencevalue != 'shopping')
+
(
SELECT COUNT(users.id)
FROM users
WHERE users.id NOT IN
(SELECT userpreference.Id
FROM userpreference )
)
AS'Total'

Ответы [ 3 ]

2 голосов
/ 04 марта 2011
Select Count(*)
From Users
Where Not Exists   (
                    Select 1
                    From UserPreference As UP1
                    Where UP1.id = Users.id
                        And UP1.PreferenceValue = 'Shopping'
                    )
0 голосов
/ 04 марта 2011

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

ВЫБЕРИТЕ СЧЕТЧИК (DISTINT U.id) ОТ ПОЛЬЗОВАТЕЛЕЙ U ЕСТЕСТВЕННЫЙ ЛЕВЫЙ ПОДКЛЮЧЕНИЕ ГДЕ UP.preferencevalue НУЛЬ ИЛИ UP.preferenceValue! = 'Shopping';

В LEFT JOIN должны быть введены все записи пользователей, независимо от того, есть ли у них запись UP.

0 голосов
/ 04 марта 2011

Попробуйте ПРАВИЛЬНОЕ СОЕДИНЕНИЕ, в которое войдут все люди, которые не отображаются во второй таблице

ВЫБРАТЬ * ИЗ Users ПРАВИЛЬНОЕ СОЕДИНЕНИЕ ВКЛЮЧЕНО (User. userID = Users. userID)ГДЕ preference_value = 'покупки'

...