MYSQL Соединить три таблицы с исключениями

0

Я работаю с тремя таблицами SQL и использую INNER JOIN для объединения этих таблиц. Вот обзор того, как выглядят таблицы.

Изображение 174551

CREATE TABLE 'User' (
   'id' varchar(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
   'firstName' varchar(64) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
   'lastName' varchar(64) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
   'email' varchar(64) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
   PRIMARY KEY ('id')                                                                       ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |


CREATE TABLE 'Ownership' ( 
   'id' int(10) unsigned NOT NULL AUTO_INCREMENT,
   'user' varchar(32) COLLATE utf8_unicode_ci NOT NULL,
   'certificate' int(10) unsigned NOT NULL,
   PRIMARY KEY ('id'),
   UNIQUE KEY 'unicity' ('user','certificate')                                              ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 

CREATE TABLE 'Certificate' (
   'id' int(10) unsigned NOT NULL AUTO_INCREMENT,
   'domain' varchar(64) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
   'creationDate' timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,   
   'expirationDate' timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
   'type' varchar(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
   PRIMARY KEY ('id')                                                                       ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

Запрос на присоединение к таблицам следующий:

select user, lastName, domain 
from Ownership 
    INNER JOIN User ON Ownership.user = User.id 
    INNER JOIN Certificate ON Ownership.certificate = Certificate.id;'

У меня есть такой результат, например: Изображение 174551

Я хотел бы получить только одного пользователя для одного доменного имени и создать исключение для объединения, только если значение certificate.domain еще не существует.

Это возможно с MYSQL?

Спасибо

  • 1
    Не публикуйте структуры таблиц как изображения. Мы не можем копировать / вставлять, чтобы делать тесты.
  • 0
    Можете ли вы предоставить пример результата, который хотите получить?
Показать ещё 2 комментария
Теги:
datatables
exception
join

1 ответ

0

Вам необходим предварительный запрос, чтобы хотя бы определить какой-либо компонент уникальности, связанный с данным доменом. Чтобы получить это, давайте рассмотрим это.

select 
      C.domain,
      min( O.user ) JustOneUser 
   from 
      Certificate C
         JOIN Ownership O
            on C.ID = O.Certificate
   group by
      C.Domain

Таким образом, это получит одного пользователя для данного домена. Теперь используйте результат THAT, чтобы связать пользователя с доменом.

select
      PQ.Domain,
      U.LastName,
      U.FirstName
   from
      (select 
             C.domain,
             min( O.user ) JustOneUser 
          from 
             Certificate C
                JOIN Ownership O
                   on C.ID = O.Certificate
          group by
             C.Domain ) PQ
      JOIN User U
         on PQ.JustOneUser = U.ID
  • 0
    Большой! Спасибо

Ещё вопросы

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