MySQL INSERT-SELECT一个带有JOIN的非必填字段

时间:2013-05-11 00:34:43

标签: mysql join insert

我有一个表(netStream),它有2个外键:(logSessions_logSessionID)和(accountSessions_accountSessionID)。

logSessions_logSessionID)是强制性的,(accountSessions_accountSessionID)不是强制性的。

以下是显示连接和非强制状态的块方案的一部分:

enter image description here

(背景:logSessions是每个访问者拥有的会话,accountSessions是登录会话。每个人都有logSession(因为每个人都是访问者),但不是每个人都是登录后,他们没有accountSession

我想在(netStream)中插入一行,在每种情况下都有一个(logSession),但它与(accountSession)不一样。所以,当有(accountSession)时,我也要插入那个ID,如果没有(accountSession),那么只需将该字段保留在(netStream)中。< / p>

哈希值存储在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");

1 个答案:

答案 0 :(得分: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