Mysql完全外部联接临时表

Mysql完全外部联接临时表,mysql,join,temp-tables,Mysql,Join,Temp Tables,关于完全加入mysql(5.1.36),有很多问题。当然,解决方案是联合 我的问题是我有两个临时表,如下所示: CREATE TEMPORARY TABLE wConfs ( idWorker INT, confs SMALLINT ) ENGINE=INNODB; CREATE TEMPORARY TABLE wRejects ( idWorker INT, rejects SMALLINT ) ENGINE=INNODB; JOIN-UNION mix不能

关于完全加入mysql(5.1.36),有很多问题。当然,解决方案是联合

我的问题是我有两个临时表,如下所示:

CREATE TEMPORARY TABLE wConfs
(
    idWorker INT,
    confs SMALLINT
) ENGINE=INNODB;

CREATE TEMPORARY TABLE wRejects
(
    idWorker INT,
    rejects SMALLINT
) ENGINE=INNODB;
JOIN-UNION mix不能用于完全联接临时表,因为它将导致
错误1137(HY000):无法重新打开表

我的问题是——要在临时表上实现完全连接,哪种最简单、性能最好的解决方案

编辑: 联合组合:

SELECT wc.idWorker, wc.confs, wr.rejects FROM wConfs wc LEFT JOIN wRejects wr 
ON (wr.idWorker = wc.idWorker)
UNION
SELECT wc.idWorker, wc.confs, wr.rejects FROM wConfs wc RIGHT JOIN wRejects wr 
ON (wr.idWorker = wc.idWorker);

尝试使用两个表中不同的
idWorker
值创建第三个临时表,然后在您的联合组合中使用它,例如-

CREATE TEMPORARY TABLE all_id
  SELECT idWorker FROM wConfs UNION SELECT idWorker FROM wRejects;

SELECT t.idWorker, c.confs, r.rejects FROM all_id t
LEFT JOIN wConfs c
  ON t.idWorker = c.idWorker
LEFT JOIN wRejects r
  ON t.idWorker = r.idWorker;

我找到了另一种解决方法。我还创建了第三个临时表:

DROP TABLE IF EXISTS wResults;
CREATE TEMPORARY TABLE wResults
(
    idWorker INT PRIMARY KEY,
    rejects SMALLINT,
    confs SMALLINT
) ENGINE=INNODB;
现在,我向其中插入行,如下所示:

INSERT INTO wResults(idWorker, confs)
    SELECT idWorker, confs FROM wConfs;

INSERT INTO wResults(idWorker, rejects)
    SELECT wr.idWorker, wr.rejects FROM wRejects wr
    ON DUPLICATE KEY UPDATE rejects = wr.rejects;
它就像一个符咒。我想如果有很多数据要插入,速度会很慢,但我的表相当小。
无论如何,谢谢大家

“加入工会组合”的代码在哪里?将此组合添加到我的问题中。结果表有点像oakward,它有以下列
|idWorker | idWorker | confs | idWorker | rejects |
。这不是问题。指定所需的字段,而不是“*”。我已经更改了答案。它包含了我需要的所有字段,甚至更多;)它应该只有一个
idWorker
列。请在选择列表中指定所需的字段。我没有注意到您昨天编辑了这个。很抱歉谢谢你的回答。