Mysql: Как мне написать выбрать, где идентификаторы не находятся в другой таблице

0
I have a simple structure of 2 tables:  contacts and group_contacts.

A contact can belong to one, many or no groups.

I'm trying to write a select statement that will give me all the contacts
that don't belong to group_id '123'. The negative, don't, has me confused.

CREATE TABLE IF NOT EXISTS `contacts` (
  `contact_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL)

CREATE TABLE IF NOT EXISTS `group_contacts` (
  `contact_id` bigint(20) unsigned NOT NULL,
  `group_id` int(11) unsigned NOT NULL)



thanks

Теги:

4 ответа

3
Лучший ответ

Вам нужно будет выполнить это в двух макро-шагах:

  • Сначала вам нужно будет оставить внешнее соединение между контактами и таблицей group_contacts, чтобы было выбрано все контакты, которые выполняют и не имеют какого-либо релевантного отношения в таблице group_contacts.
  • Затем в предложение where group_contacts group_id из 123 должно быть загружено.
4
select a.contact_id from contacts a, group_contacts b where b.group_id<>123 and b.contact_id=a.contact_id;
  • 0
    условие соединения всегда должно быть в предложении формы для фильтрации умножения таблиц.
  • 0
    я не могу понять ваш комментарий, братан ... ... что вы подразумеваете под формой?
2
select * from contacts as ct 
left join group_contacts as gc on ct.contact_id=gc.contact_id
where gc.group_id!=123
1

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

select * from contacts a left join  group_contacts b
on a.contact_id = b.contact_id
where  b.group_id !=123
  • 0
    синтаксическая ошибка в запросе. пожалуйста, проверьте. Я не уверен, что мы можем использовать как "left join b group_contacts". Имя Алисии должно быть после имени таблицы
  • 0
    я исправляю спасибо, это опечатка ошибка b должна быть после имени таблицы

Ещё вопросы

Сообщество Overcoder
Наверх
Меню