我有一個表(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");
謝謝,這是工作。我想知道這個表現。一個INSERT中的兩個SELECT與JOIN具有相同的性能嗎? – 2013-05-11 01:17:24
@ÁgotaHorváth不客氣。在那個特殊情況下,恕我直言,它沒有性能影響。對於要加入的數據集,必須首先選擇它們。 – peterm 2013-05-11 01:26:22