2013-05-11 3 views
1

У меня есть таблица (netStream), которая имеет 2 внешних ключа: (logSessions_logSessionID) и (accountSessions_accountSessionID).MySQL INSERT-SELECT необязательное поле с JOIN

(logSessions_logSessionID) является обязательным (accountSessions_accountSessionID) НЕ является обязательным.

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

enter image description here

(Фон: 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"); 

ответ

0

Если вас правильно понял вы, вероятно, ищете что-то вроде этого

INSERT INTO `test-db`.`netStream` (
    `netStreamHash`, 
    `logSessions_logSessionID`, 
    `accountSessions_accountSessionID`) 
SELECT UNHEX("1faab"), 
     (SELECT `logSessionID` FROM `logSessions` 
     WHERE `logSessionHash` = UNHEX("aac")), 
     (SELECT `accountSessionID` FROM `accountSessions` 
     WHERE `accountSessionHash` = UNHEX("2fb")); 

Если нет соответствующей строки в accountSessions, то вы получите NULL вставляется в accountSessions_accountSessionID в netStream таблице

+0

спасибо, что работает. Мне интересно о производительности. Имеет ли два SELECT в одном INSERT такую ​​же производительность, как JOIN? –

+0

@ ÁgotaHorváth Добро пожаловать. В этом конкретном случае IMHO не имеет последствий для производительности. Для набора данных, которые нужно объединить, они должны быть выбраны первыми в любом случае. – peterm

Смежные вопросы