У меня есть таблица (netStream
), которая имеет 2 внешних ключа: (logSessions_logSessionID
) и (accountSessions_accountSessionID
).MySQL INSERT-SELECT необязательное поле с JOIN
(logSessions_logSessionID
) является обязательным (accountSessions_accountSessionID
) НЕ является обязательным.
Вот часть блока-схема, которая показывает соединения и необязательный статус:
(Фон: logSessions
являются сессии, которые каждый посетитель имеет, accountSessions
являются Войти сессий. каждый имеет logSession
(так как все это посетитель), но далеко не все вошли в систему, поэтому они не имеют accountSession
)
Я хочу, чтобы вставить строку в (netStream
), в каждом случае есть (logSession
), но это не то же самое (accountSession
). Итак, когда есть (accountSession
), я тоже хочу вставить этот ID, если нет (accountSession
), тогда просто оставьте это поле в (netStream
) NULL.
Хэш-значения хранятся в Binary(x)
, поэтому я использую UNHEX()
.
Это MySQL, который я написал, нет сообщения об ошибке, но он не работает. В чем проблема?
INSERT INTO `test-db`.`netStream` (`netStreamHash`, `logSessions_logSessionID`, `accountSessions_accountSessionID`)
SELECT UNHEX("1faab"), `logSessions`.`logSessionID`, NULL FROM `logSessions` CROSS JOIN `accountSessions`
WHERE `logSessions`.`logSessionHash` = UNHEX("aac") AND
`accountSessions`.`accountSessionHash` = UNHEX("2fb");
спасибо, что работает. Мне интересно о производительности. Имеет ли два SELECT в одном INSERT такую же производительность, как JOIN? –
@ ÁgotaHorváth Добро пожаловать. В этом конкретном случае IMHO не имеет последствий для производительности. Для набора данных, которые нужно объединить, они должны быть выбраны первыми в любом случае. – peterm