Я работаю с тремя таблицами SQL и использую INNER JOIN для объединения этих таблиц. Вот обзор того, как выглядят таблицы.
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;'
У меня есть такой результат, например:
Я хотел бы получить только одного пользователя для одного доменного имени и создать исключение для объединения, только если значение certificate.domain еще не существует.
Это возможно с MYSQL?
Спасибо
Вам необходим предварительный запрос, чтобы хотя бы определить какой-либо компонент уникальности, связанный с данным доменом. Чтобы получить это, давайте рассмотрим это.
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