#sql
#sql
Вопрос:
У меня проблема с веб-приложением javascript, которое использует единый вход в Microsoft Office. По какой-то причине, которую мне еще предстоит выяснить, пользователи дублируются в моей базе данных. Прежде чем я начну устранять неполадки, я хочу попробовать очистить базу данных.
Я хочу выполнить поиск любого пользователя в Employee
таблице, у которого нет никаких предложений ни в одной из таблиц предложений. Таким образом, список пользователей, которые не вносили никаких предложений, у которых есть дублирующиеся учетные записи, которые я могу удалить. Каков был бы наилучший способ сделать это?
Также обратите внимание, что у rick (ID 6 и 7) вообще нет никаких вкладов. Удаление обеих учетных записей было бы проблематичным.
Сотрудник
ID name hair
--------------------
1 bob brown
2 jeff blond
3 jeff brown
4 steve none
5 steve none
6 rick red
7 rick red
suggestions_lunch
ID suggestion status
---------------------------------
2 free food planned
3 warmer coffee declined
suggestions_pay
ID suggestion status
----------------------------------------------
5 We pay bob too much investigating
Здесь идентификатор 4 будет удален. Я думаю, мне понадобится второй SQL-запрос, который показывает всех пользователей, у которых есть несколько учетных записей без каких-либо вкладов в любом месте.
SELECT *
FROM employee
WHERE ...
Ответ №1:
Простым способом проверить наличие или, скорее, несуществование значения предложения null в столбце «Предложения» было бы проверить с помощью is null
SELECT e.name
,sl.suggestion
FROM Employee e
JOIN suggestion_lunch sl ON sl.ID = e.ID
WHERE suggestion IS NULL;
Это хорошее начало того, что вы пытаетесь сделать. Он выберет имя из таблицы employee и предложение из таблицы suggestion_lunch.
После выбора имени и предложения мы внутренне объединяем их на том основании, что предложенный идентификатор обеда = идентификатор сотрудника
Наконец, мы используем WHERE для проверки наличия нулевых значений. Представьте, что когда мы выполняем запрос без предложения WHERE… мы получаем таблицу со всеми именами сотрудников и предложениями. Чтобы отображать только пользователей, у которых НЕТ предложений, мы используем предложение IS NULL, поскольку значение таблицы будет равно NULL, если не было сделано никаких предложений.
Что касается удаления дубликатов, я бы предложил отдельный запрос, объединенный с GO
Комментарии:
1. это второй выбор (сл.предложение) в инструкции select … должен ли это быть sl.suggestion_pay и можете ли вы объединить его с другими (sl.suggestions_lunch). Тогда, я думаю, мне также нужно будет перечислить их в инструкции from? Из suggestion_lunch sl, suggestions_pay sp .. что-то вроде этого?
2. У меня это написано таким образом
SELECT e.name, sl.suggestion
, потому что я просто извлекаю столбец из таблицы вместо того, чтобы извлекать всю таблицу. Я свяжу этот столбец с другой таблицей позже в моем предложении JOIN, чтобы он знал, откуда я пытаюсь это извлечь. Использование только столбца sl.suggestions вместо таблицы suggestions_lunch более эффективно и помогает сохранить результаты ясными. Вы можете извлекать столько столбцов из разных таблиц, сколько захотите, при условии, что вы правильно их соединяете.