MySQL - 如何进行外连接,其中任一边是可选的 - 左外连接和右外连接

时间:2013-12-11 22:27:01

标签: mysql

如果连接的任何一方存在,我需要加入2个将返回行的MySQL表,如果两边都存在,则只返回一行。

这是一个简单的例子:

CREATE TABLE `a` (
  `id` INT(11) ,
  `qty` INTEGER DEFAULT NULL,
  PRIMARY KEY (`id`)
);

CREATE TABLE `b` (
  `id` INT(11) ,
  `price` DECIMAL(8,2)  DEFAULT NULL,
   PRIMARY KEY (`id`)
);

INSERT  INTO `a`(`id`,`qty`) VALUES (1,1),(3,0);
INSERT  INTO `b`(`id`,`price`) VALUES (1,'10.00'),(2,'20.00');

SELECT * FROM a 
LEFT OUTER JOIN b ON a.id=b.id;
returns 1 and 3

SELECT * FROM b 
LEFT OUTER JOIN a ON a.id=b.id;
returns 1 and 2


SELECT * FROM a 
LEFT OUTER JOIN b ON a.id=b.id
  UNION
SELECT * FROM b 
LEFT OUTER JOIN a ON a.id=b.id;
returns 1, 3, 1 , 2 

SELECT * FROM a 
LEFT OUTER JOIN b ON a.id=b.id
  UNION
SELECT * FROM b 
RIGHT OUTER JOIN a ON a.id=b.id;
returns 1, 3, 1

这可能在MySQL中获得1,2,3还是我必须围绕它进行编程?

1 个答案:

答案 0 :(得分:2)

您需要的是FULL OUTER JOIN,遗憾的是,它并未在MySQL中实现。但是,您可以使用union实现相同的功能。有关如何执行此操作,请参阅this answer